我在申请中使用EF。
我尝试保存\将新记录插入映射表
并收到以下错误:
Unable to update the EntitySet 'UsersLimitationToCountry' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
我应该自己在edmx中定义吗?怎么样?
答案 0 :(得分:88)
我的多对多映射表缺少PK
补充说,问题已经解决了。
答案 1 :(得分:37)
同意接受的答案。 只是提供它背后的原因......
当使用没有主键的表完成EF映射时,它被视为视图&amp;观点是合乎逻辑的,不能更新。
因此,要么在ur表中添加缺少的主键,要么将它们视为View&amp;不要对它们执行任何更新操作。
答案 2 :(得分:24)
如果你的视图是可更新的,你可以简单地删除 来自您的视图的EntitySet定义中的元素 您的.edmx的StorageModel部分,以及正常的更新处理 将像任何其他表一样工作。
对我来说就是这种情况。简单地删除导致另一个错误。我按照这篇文章的步骤,除了最后一个。为方便起见,我复制了我所遵循的帖子中的4个步骤来解决问题,如下所示:
DefiningQuery
答案 3 :(得分:5)
我在可更新的视图上遇到了这个问题。找到this article解决了我的问题。
因此,我的视图的基础表确实定义了主键,但EF不知道PK中的哪些列,因为实体是在视图上构建的。这里的技巧是'说服'EF你的视图可以作为表更新。 步骤几乎与上述答案中提到的相同:
<DefiningQuery>
部分store:Type="Views"
更改为store:Type="Tables"
答案 4 :(得分:4)
右键单击edmx文件,选择Open with,XML editor
在edmx:StorageModels元素
完全删除DefiningQuery
将store:Schema="dbo"
重命名为Schema="dbo"
(否则,代码会生成错误,说明名称无效)
这些步骤对我有用
答案 5 :(得分:2)
**重新检查你的表没有PK:**只需添加主键然后删除并重新添加表到edmx然后它应该工作
答案 6 :(得分:2)
我的表在sql表设计中没有主键。添加并解决了。
答案 7 :(得分:1)
确保您的外键表没有多个与您的引用表中的列匹配的列名;只有主键应该与您的ref表和refereed表匹配。 0..1应具有可分辨的列名,为您的列开发命名约定,以确保引用和引用的表不具有多个匹配的列名。 由ALMwConsult.net提供
答案 8 :(得分:1)
如果您没有在表中处理主键,那么这个问题 在更新和插入记录数据库时肯定会出现在MVC中
DbUpdate异常未被用户
处理答案 9 :(得分:0)
使用db first mvc application。问题是我忘了为表定义主键。通过使用alter命令添加主键并更新DAL(edmx)
来解决