.net 为什么会出现此错误:没有为以下EntitySet/AssociationSet-Entity1指定映射?
我使用实体框架4和模型优先的方法 我启动了项目,设计了实体并生成了数据库。一切都很顺利 然后我需要返回并将另一个实体添加到我的模型中。但是,当我将实体拖动到EDMX时,会出现以下错误: 好的!我只需要将Entity1映射到一个表。。但是嘿!我使用模型优先的方法,我希望它在生成DDL时为我创建表.net 为什么会出现此错误:没有为以下EntitySet/AssociationSet-Entity1指定映射?,.net,entity-framework,entity-framework-4,.net,Entity Framework,Entity Framework 4,我使用实体框架4和模型优先的方法 我启动了项目,设计了实体并生成了数据库。一切都很顺利 然后我需要返回并将另一个实体添加到我的模型中。但是,当我将实体拖动到EDMX时,会出现以下错误: 好的!我只需要将Entity1映射到一个表。。但是嘿!我使用模型优先的方法,我希望它在生成DDL时为我创建表 如何解决此错误?这是因为EF4首先处理模型的方式 当您第一次创建模型优先模型时,它处于SSDL不存在的状态。您可以拖动实体、关联它们等等,但是,如果查看EDMX文件上的SSDL,您将看到没有任何实体在S
如何解决此错误?这是因为EF4首先处理模型的方式 当您第一次创建模型优先模型时,它处于SSDL不存在的状态。您可以拖动实体、关联它们等等,但是,如果查看EDMX文件上的SSDL,您将看到没有任何实体在SSDL中具有关联的存储表 当您单击
从模型生成数据库
上下文菜单项时,情况会发生变化。令人困惑的是,这个操作不仅仅是生成一个DDL脚本。实际上,它更改了EDMX文件以包含SSDL信息。从这一点开始,EDMX文件将进入这样一种状态:设计器/CSDL中的每个实体都必须映射到SSDL中的一个实体。如果没有映射,将触发编译时错误:
未为以下EntitySet/AssociationSet-(EntityName)指定映射
另一个有趣的事实是,这种错误不会阻止编译。实际上,它将生成输出类库。这不是一个警告吗
为了防止此错误,在插入新实体后,您所要做的就是再次从模型生成数据库。这将更新SSDL并修复映射
编辑
如果您没有首先使用模型,并且“从数据库更新”,那么在DB Server中删除表的情况下也会出现此错误。这是因为实体框架不会自动为您删除实体。手动删除实体,错误将消失。我发现我遇到了相同的错误,因为我在创建两个实体之间的关联后忘记创建引用约束 我遇到了同样的错误,但我没有首先使用模型。事实证明,不知何故,我的EDMX文件包含了对表的引用,即使它没有显示在设计器中。有趣的是,当我在Visual Studio(2013)中对表名进行文本搜索时,没有找到该表
为了解决这个问题,我使用了一个外部编辑器(Notepad++)在EDMX文件中查找对有问题的表的引用,然后(小心地)删除了对该表的所有引用。很抱歉,我不知道EDMX文件最初是如何进入这种状态的。在我的例子中,另一个开发人员已经从基础数据库中删除了一些表。当我意识到这一点,并从实体中删除这些表时,问题就解决了。没有听起来那么明显 错误3027:未为以下EntitySet/AssociationSet指定映射…-实体框架 如果您正在使用实体框架开发模型,则有时可能会遇到以下恼人的错误: 错误3027:未为以下EntitySet/AssociationSet[实体或关联名称]指定映射 当EDM上的一切正常时,这可能没有意义,但这是因为此错误通常与EDM无关。它应该说的是“重新生成数据库文件” 您可以看到,实体在构建过程中会检查SSDL和MSL,因此如果您只是更改了EDM,但没有使用生成数据库模型…,那么它会抱怨您的sql脚本中缺少内容 因此,简而言之,解决方案是: “如果您正在进行模型优先开发,请不要忘记在每次更新EDM后生成数据库模型。我希望你的问题得到解决”
和搜索外部文件
public virtual DbSet< Entity1> Entity1 { get; set; }
公共虚拟DbSetweb.config.connectionString
时,问题在于指向一个新表而不是用于生成原始映射的表
这是一个新的数据库,这些带有3027错误的实体不存在。当我从数据库中删除一个表时出现此错误。通过右键单击EDMX图表,转到“属性”,从“属性”窗口的列表中选择表,然后删除它(使用delete键),解决了此问题从图表中。我对表格进行了更改,并创建了另一个实体,其末尾带有数字1(如
MyEntity1
和MyEntity1
),这一点得到了edmx模型浏览器的确认。有关这两个实体的某些信息混淆了处理过程
删除表并重新添加它修复了它
请注意,如果TFS已连接,则在删除后签入edmx in。然后,只有这样,才能获得最新的并在确定的两步过程中重新添加。否则TFS会与相同命名实体的删除和重新添加混淆,这似乎会导致问题。对我来说,一个更快的方法是删除t