我们的应用程序是MVC应用程序。我们正在使用实体框架。当我更新模型以从数据库添加表时。我收到一个例外,它说
“尝试从数据库更新时发生了'System.ArgumentException'类型的异常。例外消息是:'具有相同密钥的条目已存在'。”
我无法弄清问题是什么。我可以找到解决问题的解决方案。
答案 0 :(得分:38)
我就像你一样。您可能有两个相同的节点:EntitySetMapping
。你应该删除一个,一切都会好的。
答案 1 :(得分:3)
我今天遇到了这个问题。这意味着您有两个具有相同名称的定义。就我而言,它是一个重复的EntitySetMapping。这是因为我将一些自定义项从旧版本的模型迁移到新版本。我复制了一个带有自定义插入/删除/更新映射的EntitySetMapping,但我没想删除之前由模型设计者自动生成的映射。
不幸的是,在下次尝试从数据库进行更新之前,您不会知道您遇到此问题,这意味着有可能在一段时间内未检测到此问题。
将来,当通过XML编辑器对模型进行重大更改时,我建议您进行测试数据库更新,以确保一切正常。
答案 2 :(得分:1)
可能存在另一个存在相同密钥的表。我们能看到代码吗?详细了解此异常here。
答案 3 :(得分:1)
我最近遇到了与EF6类似的问题,其中发生了此错误,并且在任何地方都没有重复的键... 在edmx 中可见。我要做的是右键单击edmx并选择Model Browser。在“模型浏览器”视图中和“模型/实体类型”下,存在一些延迟实体。出于某种原因,删除edmx中的所有实体实际上没有按照您的想法执行。在模型浏览器中删除这些延迟的实体解决了我的问题。希望这能解决一些人的问题,因为这种解决方案很容易修复但很难找到。
答案 4 :(得分:0)
好吧,我似乎找到了解决问题的方法。
步骤1:我从edmx模型中删除了包含引用的表或导致错误的内容。
步骤2:我右键单击设计器并再次单击“从数据库更新模型”,所有内容都已修复。
仅供参考,我知道要删除哪个表的唯一方法是因为它是自“数据库更新模型”最后工作以来修改的最后一个表。
答案 5 :(得分:0)
这是基于Tazos333's answer的更详细的答案。
查找实际重复项是最困难的部分。使用Powershell可以通过以下方式完成:
Get-Content .\models.edmx | Group-Object | Where-Object { $_.Count -gt 1 } | Select -ExpandProperty Name
为了获得尽可能少的误报结果,请仅对<!-- C-S mapping content -->
部分(复制粘贴到其他文本文件中)运行此结果。
除了标量属性重复项(相当正常,因为表可能包含相同的列名)之外,重复项<EntitySetMapping Name="...">
也将非常明显。