为什么我收到此错误:没有为以下EntitySet/AssociationSet指定映射 - Entity1?

And*_*ena 91 .net entity-framework entity-framework-4

我正在使用Entity Framework 4和Model First方法.

我启动了项目,设计了实体并生成了数据库.一切都很好.

然后我需要回去为我的模型添加另一个实体.但是,当我将实体拖到EDMX时,我收到此错误:

在此输入图像描述

好的!我只需要将Entity1映射到一个表..但是嘿!我正在使用Model First方法,我希望它在生成DDL时为我创建表.

我该如何解决此错误?

And*_*ena 144

这是因为EF4以模型优先的方式工作.

首次创建模型优先模型时,它处于SSDL不存在的状态.您可以拖动实体,关联它们等等,但是,如果您查看EDMX文件上的SSDL,您将看到没有任何实体在SSDL中具有关联的存储表.

单击Generate Database From Model上下文菜单项时,这会更改.令人困惑的部分是,此操作不仅仅是生成DDL脚本.实际上,它会更改EDMX文件以包含SSDL信息.从此时起,EDMX文件将进入一种状态,其中designer/CSDL中的每个实体都必须映射到SSDL中的实体.如果没有映射,则会触发编译时错误:

没有为以下EntitySet/AssociationSet指定映射 - (EntityName)

另一个有趣的事实是,它不是那种会阻止编译的错误.它确实会生成输出类库.它不应该是一个警告或什么?

要防止出现此错误,请在插入新实体后Generate Database From Model再次执行此操作.这将更新SSDL并修复映射.

编辑

如果您不使用模型优先并且"从数据库更新",则在删除数据库服务器中的表的情况下也会出现此错误.这是因为Entity Framework不会自动为您删除实体.手动删除实体,错误将消失.

  • @balanza,当您不使用模型优先并且基于数据库更新模型时,在服务器中删除表时会出现此错误,因为EF设计器不会自动删除实体.手动删除实体类型时,错误将消失 (5认同)

小智 35

我发现我得到了同样的错误,因为我忘了在两个实体之间创建关联后创建引用约束.

  • 仅供参考:检查关联的属性,底部的"参照约束"将为空.单击省略号并创建约束. (13认同)

Aze*_*mad 21

错误3027:没有为以下EntitySet/AssociationSet指定映射..." - 实体框架令人头疼

如果您正在使用实体框架开发模型,那么您可能会遇到这个恼人的错误:

错误3027:没有为以下EntitySet/AssociationSet指定映射[实体或关联名称]

当EDM上的一切看起来都很好时,这可能没有意义,但那是因为这个错误通常与EDM无关.应该说的是"重新生成数据库文件".

你看,实体在构建期间检查SSDL和MSL,所以如果你刚刚更改了EDM但没有使用Generate Database Model ...那么它会抱怨你的sql脚本中缺少了东西.

因此,简而言之,解决方案是:" 如果您正在进行模型优化开发,请不要忘记 每次更新EDM后都生成数据库模型.我希望您的问题得到解决".


Gra*_*ght 7

在我的例子中,另一个开发人员从底层数据库中删除了一些表.当我意识到这一点,并从实体中删除这些表时,问题就解决了.并不像听起来那么明显.


bat*_*pox 6

我遇到了同样的错误,但我没有使用模型优先.事实证明,我的EDMX文件包含对表的引用,即使它没有出现在设计器中.有趣的是,当我在Visual Studio(2013)中对表名进行文本搜索时,找不到该表.

为了解决这个问题,我使用外部编辑器在EDMX文件中查找对违规表的引用,然后(小心地)删除对表的所有引用.我很遗憾地说,我不知道EDMX文件最初是如何进入这种状态的.


Ωme*_*Man 5

我有一个表更改,它创建了另一个带有数字 1 的实体(例如MyEntity1和 a MyEntity),正如 edmx 模型浏览器所确认的那样。关于这两个实体的一些事情一起混淆了处理。

删除表并重新添加它修复了它。


请注意,如果 TFS 已连接,则在删除后对 edmx 进行检入。然后,然后才获取最新的并在明确的两步过程中重新添加它。否则 TFS 会与相同命名实体的删除和重新添加混淆,这似乎会导致问题。


小智 5

对我来说更快的方法是删除表格并重新添加它们。它自动映射它们。:)