因为它有一个DefiningQuery,<modificationfunctionmapping>元素中没有<insertfunction>元素</modificationfunctionmapping> </insertfunction>

时间:2013-03-10 13:44:19

标签: c# .net entity-framework

我在申请中使用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中定义吗?怎么样?

10 个答案:

答案 0 :(得分:88)

我的多对多映射表缺少PK

补充说,问题已经解决了。

答案 1 :(得分:37)

同意接受的答案。 只是提供它背后的原因......

当使用没有主键的表完成EF映射时,它被视为视图&amp;观点是合乎逻辑的,不能更新。

因此,要么在ur表中添加缺少的主键,要么将它们视为View&amp;不要对它们执行任何更新操作。

答案 2 :(得分:24)

  

如果你的视图是可更新的,你可以简单地删除   来自您的视图的EntitySet定义中的元素   您的.edmx的StorageModel部分,以及正常的更新处理   将像任何其他表一样工作。

对我来说就是这种情况。简单地删除导致另一个错误。我按照这篇文章的步骤,除了最后一个。为方便起见,我复制了我所遵循的帖子中的4个步骤来解决问题,如下所示:

  1. 右键单击edmx文件,选择Open with,XML editor
  2. 在edmx:StorageModels元素
  3. 中找到实体
  4. 完全删除DefiningQuery
  5. 重命名商店:架构=&#34; dbo&#34;到Schema =&#34; dbo&#34; (否则,代码将生成错误,说明名称无效)

答案 3 :(得分:5)

我在可更新的视图上遇到了这个问题。找到this article解决了我的问题。

因此,我的视图的基础表确实定义了主键,但EF不知道PK中的哪些列,因为实体是在视图上构建的。这里的技巧是'说服'EF你的视图可以作为表更新。 步骤几乎与上述答案中提到的相同:

  1. 右键单击edmx文件,选择Open with,XML editor
  2. 在edmx:StorageModels元素
  3. 中找到实体
  4. 完全删除<DefiningQuery>部分
  5. 将商店:Schema =“dbo”重命名为Schema =“dbo”
  6. store:Type="Views"更改为store:Type="Tables"

答案 4 :(得分:4)

  1. 右键单击edmx文件,选择Open with,XML editor

  2. 在edmx:StorageModels元素

  3. 中找到实体
  4. 完全删除DefiningQuery

  5. 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)

来解决