为什么我得到这个错误:没有为以下EntitySet / AssociationSet – Entity1指定的映射?

我正在使用entity framework4与模型优先的方法。

我开始了这个项目,devise了实体并生成了数据库。 一切正常。

然后我需要回去添加另一个实体到我的模型。 但是,当我拖动一个实体到EDMX,我得到这个错误:

在这里输入图像说明

好的! 我只需要将Entity1映射到一张桌子上。但是,嘿! 我使用模型优先的方法,我期望它生成DDL时为我创build表。

我该如何解决这个错误?

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

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

单击“ Generate Database From Model上下文菜单项时会发生更改。 令人困惑的是,这个动作不仅仅是生成一个DDL脚本。 实际上,它将EDMX文件更改为包含SSDL信息。 从这一点开始,EDMX文件将进入devise者/ CSDL中的每个实体必须映射到SSDL中的实体的状态。 如果没有映射,则会触发编译时错误:

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

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

为了防止出现这个错误,在插入一个新实体之后你所要做的就是再次Generate Database From Model 。 这将更新SSDL并修复映射。

编辑

如果您没有使用model-first,并且“从数据库更新”,那么在删除DB Server中的表格的情况下也会出现此错误。 这是因为entity framework不会自动删除你的实体。 手动删除实体,错误将消失。

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

错误3027:未为以下EntitySet / AssociationSet …指定映射“ – entity framework头痛

如果您正在使用entity framework开发模型,那么您有时可能会碰到这个恼人的错误:

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

EDM上的一切看起来都不错,但这是因为这个错误通常与EDM无关。 它应该说的是“重新生成你的数据库文件”。

你会发现,Entities在构build过程中检查SSDL和MSL,所以如果你只是改变了EDM,但是不使用Generate Database Model,那么它会抱怨你的sql脚本中缺less东西。

所以,简而言之,解决scheme是:“如果您正在进行模型优化开发,每次更新EDM时都不要忘记生成数据库模型,希望您的问题得到解决。

就我而言,另一个开发人员已经从底层数据库中删除了一些表。 当我意识到这一点,并从实体中删除这些表,问题就解决了。 没有听起来那么明显。

我遇到了同样的错误,但我没有使用模型优先。 事实certificate,不知何故,我的EDMX文件包含对表格的引用,即使它没有出现在devise器中。 有趣的是,当我在Visual Studio(2013)中对表名进行文本search时,表未find。

为了解决这个问题,我使用了一个外部编辑器来查找对EDMX文件中的违规表的引用,然后(仔细地)删除对该表的所有引用。 我很抱歉地说,我不知道EDMX文件是如何进入这个状态的。

更快的方法是删除表格并重新添加。 它自动映射它们。 🙂

我有一个表更改,它创build了另一个实体,最后(如MyEntity1MyEntity )数字1(由EDMX模型浏览器确认)。 有关这两个实体一起混淆处理。

删除表,重新添加它固定它。


请注意,如果TFS挂钩,那么在删除之后执行edmx的签入。 然后,只有最后得到最新的,并在一个确定的两个步骤的过程中重新添加它。 否则,TFS会对删除和重新添加同名命名实体(这似乎会导致问题)感到困惑。

当我从数据库中删除一个表时有这个错误。 通过右键单击EDMX图,进入属性,从属性窗口的列表中select表,并从图中删除它(使用删除键)来解决它。

  1. 转到解决scheme资源pipe理器,单击searchbutton
  2. Search within file contentSearch External Files同时选中Search within file content
  3. input您的映射无法识别的实体名称。
  4. 删除与该问题相关的所有文件。 这些可能会以相同的缺失实体命名。 不要删除文件上的任何带有Context Class名称的文件,特别是如果它们的扩展名是.cs或.tt。 在上下文.cs文件中
  5. 删除所有引用缺失实体的代码行。 他们会看起来像这样:

     public virtual DbSet< Entity1> Entity1 { get; set; } 

这个错误对从数据库中删除的表是常见的。

当在数据库中删除一个表时,或者只是更改EF映射数据库的web.config.connectionStrings ,指向一个新的而不是用于生成原始映射的问题。

这是这个新的数据库这些实体与3027错误不存在。

当我尝试为存储过程进行自定义结果时,出现错误,并认为它必须是实体。

解决方法是我在Model浏览器中创build了一个复杂types,并将其作为结果分配给“编辑函数导入”。

我会在这里添加它,因为它看起来像这个问题是谷歌带你到哪里,当你得到这个错误。

我已经正确地设置了一切(基数和依赖属性),但无法弄清楚为什么我不断收到错误。 最后发现,EF在依赖表(table_tablecolumn)中生成了一个列,并且与表没有任何关系,所以没有指定映射。 我不得不删除EDMX文件中的列,并重build解决问题的解决scheme。 我正在使用数据库方法。

对于那些使用Database First方法的人来说,在插入一个新的实体之后,所有你需要做的就是通过右键单击你的.edmx文件并selectGenerate Database From Model...