具有标识[x]的项目已存在于元数据集合中.我该如何解决这个问题?

And*_*ena 9 .net c# entity-framework poco entity-framework-6

我正在使用实体框架6,使用POCO和fluent-API,我注意到了一个令人讨厌的bug.

如果我有一个被调用的实体,MyEntity并且该实体有一个被调用的属性MyProp,则无法创建一个被调用的实体MyEntity_MyProp.

例外:

The item with identity 'MyEntity_MyProp' already exists in the metadata collection.\r\nParameter name: item
Run Code Online (Sandbox Code Playgroud)

如果我重命名任何实体,或者重命名属性,错误会立即消失.

"bug"很明显:密钥[EntityName] _ [PropertyName]在元数据集合中必须是唯一的.

截图:

图片

我正在迁移一个庞大的实体框架模型,其中包括从EF 4(数据库优先)到EF 6(代码优先,使用fluent-API)的390多个类.重命名实体或表格是不可能的.

我该如何解决?

编辑

这个SO问题与我的问题没有任何关系:具有标识"Id"的项目已经存在于元数据集合中.参数名称:item

Dou*_*oug 13

当您在实体名称中使用下划线时,会发生此错误.原因是实体框架还使用下划线来创建键的名称(连接实体和属性名称).

因此,如果您有一个名为"Table"的实体,其属性为"Prop",而一个名为"Table_Prop"的表将发生冲突.这很有可能发生了什么.


And*_*ena 8

这是一个已知的错误.它目前计划以任意future版本修复,也就是说,它还没有在路线图中.

资料来源:https://entityframework.codeplex.com/workitem/2084

编辑:

根据@Anthony的说法,这在v6.1.3中得到了修复