为什么会出现此错误:没有为以下EntitySet / AssociationSet-Entity1指定映射?

| 我正在使用带有Model First方法的Entity Framework 4。 我开始了该项目,设计了实体并生成了数据库。一切正常。 然后,我需要回去向模型添加另一个实体。但是,当我将实体拖动到EDMX时,出现以下错误: 好的!我只需要将Entity1映射到表即可。但是,嘿!我正在使用“模型优先”方法,我希望它在生成DDL时为我创建表。 如何解决此错误?     
已邀请:
这是因为EF4以模型优先的方式工作。 首次创建模型优先模型时,它处于SSDL不存在的状态。您可以拖动实体,将其关联等等,但是,如果查看EDMX文件上的SSDL,您会发现没有实体在SSDL中具有关联的存储表。 单击
Generate Database From Model
上下文菜单项时,情况会改变。令人困惑的是,此操作的作用不只是生成DDL脚本。实际上,它会更改EDMX文件以包含SSDL信息。从这一点开始,EDMX文件将进入一种状态,其中设计器/ CSDL中的每个实体都必须映射到SSDL中的一个实体。如果未映射,将触发编译时错误:   没有为以下EntitySet / AssociationSet指定映射-(EntityName) 另一个有趣的事实是,不是那种会阻止编译的错误。实际上,它将生成输出类库。这不是警告吗? 为防止该错误,在插入新实体后,您要做的只是再次为“ 0”。这将更新SSDL并修复映射。 编辑 如果您没有使用“模型优先”,而是“从数据库更新”,则在删除DB Server中的表的情况下也会出现此错误。这是因为实体框架不会自动为您删除实体。手动删除实体,错误将消失。     
我发现我遇到了同样的错误,因为在两个实体之间创建关联之后,我忘记了创建参照约束。     
  错误3027:没有为以下EntitySet / AssociationSet指定映射... \“-实体框架问题 如果使用Entities Framework开发模型,则有时可能会遇到此烦人的错误:   错误3027:未为以下EntitySet / AssociationSet [实体或关联名称]指定映射 当在EDM上一切正常时,这可能没有任何意义,但这是因为此错误通常与EDM无关。应该说的是“重新生成数据库文件”。 您会看到,实体在构建期间会对照SSDL和MSL进行检查,因此,如果您只是更改了EDM但未使用“生成数据库模型...”,则它会抱怨sql脚本中缺少某些内容。 简而言之,解决方案是: \“如果要进行模型优先开发,请不要忘记在更新EDM之后每次生成数据库模型。希望您的问题得到解决\”。     
就我而言,另一位开发人员已从基础数据库中删除了一些表。当我意识到这一点,并从实体中删除了这些表后,问题就解决了。听起来并不那么明显。     
我遇到了同样的错误,但是我没有使用模型优先。事实证明,即使我的EDMX文件没有在设计器中显示,它还是以某种方式包含对表的引用。有趣的是,当我在Visual Studio(2013)中对表名进行文本搜索时,找不到该表。 为了解决该问题,我使用了外部编辑器(Notepad ++)在EDMX文件中找到对有问题的表的引用,然后(小心地)删除了对该表的所有引用。很抱歉,我不知道EDMX文件最初是如何进入此状态的。     
对我来说,一种更快的方法是删除表并重新添加它们。它自动映射它们。 :)     
我进行了表更改,并通过edmx模型浏览器确认,它创建了另一个末尾带有数字1的实体(例如
MyEntity1
MyEntity
)。关于这两个实体的某些信息使处理过程混淆了。 删除表并重新添加以修复它。 请注意,如果挂接了TFS,则在删除后对edmx进行检入。然后,只有这样,才能获取最新信息,并通过明确的两步过程将其重新添加。否则,TFS会与相同名称实体的删除和重新添加混淆,这似乎会引起问题。     
对于那些使用
Database First
方法的人,在插入新实体后,您只需要做的是再次右键单击
.edmx
文件并选择
Generate Database From Model...
至to0ѭ。     
从数据库中删除表时发生此错误。通过右键单击EDMX图表,转到“属性”,从“属性”窗口的列表中选择表,然后从图中将其删除(使用Delete键)来解决该问题。     
转到解决方案资源管理器,单击搜索按钮 保持选中
Search within file content
Search External Files
输入您的映射无法识别的实体名称。 删除所有与问题相关的文件。这些名称可能以相同的缺失实体命名。请勿删除文件上带有您的上下文类名称的任何文件,尤其是其扩展名是.cs或.tt时。在上下文.cs文件中。 删除所有引用缺少的实体的代码行。它们将如下所示:
public virtual DbSet< Entity1> Entity1 { get; set; }
从数据库删除的表常见此错误。 当一个人在数据库中删除一张表,或者只是更改EF Mapped数据库的ѭ11时,就指向一个新表,而不是用于生成原始映射的那个。 正是这个新的数据库不存在带有3027错误的这些实体。     
尝试为存储过程创建自定义结果并假定它必须是一个实体时出现错误。 解决的方法是,我只是在“模型”浏览器中创建了一个复杂类型,并将其分配给“编辑功能导入”。 我将其添加到此处,因为看起来好像这个问题是当您收到此错误时Google将您带到哪里。     
我已经正确设置了所有内容(基数和相关属性),但无法弄清楚为什么我继续收到错误。最终发现,EF在自己的依赖表中(table_tablecolumn)生成了一个列,它与表没有任何关系,因此未指定映射。我必须删除EDMX文件中的列,然后重建解决此问题的解决方案。我正在使用数据库方法。     
来自数据库的更新模型不适用于我。 我必须删除冲突的实体,然后从数据库执行更新模型,最后重新构建解决方案。之后,一切正常。     
与他人分享。就我而言,我们正在研究共享的MVC解决方案,并为用于下拉菜单的表使用一个通用模块。通过添加新表更新实体模型时出现错误。事实证明,当我更新EDMX时,它可能更新了我对数据库的权限访问权限,这导致无法访问该表,从而给我12英镑。 只需重新添加并授予我的用户访问权限即可解决该问题。     
我想我是从没有在重命名和重新添加它们之前从edmx中显式删除一些表中得到的。相反,我只是重命名了表,然后从数据库中进行了更新模型,以为它将消失,然后从模型中删除它们。然后,我从数据库做了另一个更新模型,并添加了重命名的表。 该站点正在使用新表,但是出现了错误。最终,我注意到原始表格仍在模型中。我从模型中删除了它们(在edmx屏幕中单击它们,删除键),然后错误消失了。     

要回复问题请先登录注册