.net - 为什么我收到此错误 : No mapping specified for the following EntitySet/AssociationSet - Entity1?

标签 .net entity-framework entity-framework-4

我使用 Entity Framework 4 和模型优先方法。

我启动了该项目,设计了实体并生成了数据库。一切正常。

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

enter image description here

好吧!我只需要将 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/

相关文章:

.net - 无法使用 Ubuntu 在 Raspberry Pi 上执行 Windows Form .exe

c# - 带有每个字符串标签的 AutoCompleteStringCollection

c# - 带有 IOC : "The current type is an interface and cannot be constructed" 的身份框架

c# - Entity Framework 模型第一个导航属性添加无效的列名来查询?

C#根据另一个列表(不同类)的值序列对列表进行排序

c# - 您是否应该实现 IDisposable.Dispose() 以使其永远不会抛出?

database - "Cannot drop database because it is currently in use"。怎么修?

c# - 如何禁用泛型复杂类型字段的延迟加载?

c# - 不知道如何使用 Entity Framework 4 生成我需要的查询

c# - 使用带有日期时间和 bool 值的自动映射器来表示 POCO 中的半天