我使用 Entity Framework 4 和模型优先方法。
我启动了该项目,设计了实体并生成了数据库。一切正常。
然后我需要返回并添加另一个实体到我的模型中。但是,当我将实体拖到 EDMX 时,我收到此错误:
好吧!我只需要将 Entity1 映射到表..但是嘿!我正在使用模型优先方法,我希望它在生成 DDL 时为我创建表。
如何解决此错误?
最佳答案
这是因为 EF4 采用模型优先的方式。
当您第一次创建模型优先模型时,它处于 SSDL 不存在的状态。您可以拖动实体、关联它们等等,但是,如果您查看 EDMX 文件上的 SSDL,您会发现没有任何实体在 SSDL 中具有关联的存储表。
当您单击从模型生成数据库
上下文菜单项时,情况会发生变化。令人困惑的部分是,此操作不仅仅是生成 DDL 脚本。事实上,它更改了 EDMX 文件以包含 SSDL 信息。从此时起,EDMX 文件将进入设计器/CSDL 中的每个实体都必须映射到 SSDL 中的实体的状态。如果不映射,就会触发编译时错误:
No mapping specified for the following EntitySet/AssociationSet - (EntityName)
另一个有趣的事实是,它不是那种会阻止编译的错误。它确实会生成输出类库。难道不应该是一个警告或者什么吗?
为了防止出现此错误,插入新实体后您所要做的就是再次从模型生成数据库
。这将更新 SSDL 并修复映射。
编辑
如果您没有使用模型优先并且“从数据库更新”,则在删除数据库服务器中的表时也会出现此错误。这是因为 Entity Framework 不会自动为您删除实体。手动删除该实体,错误就会消失。
关于.net - 为什么我收到此错误 : No mapping specified for the following EntitySet/AssociationSet - Entity1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667355/