因为它有一个DefiningQuery,并且<ModificationFunctionMapping>元素中不存在<InsertFunction>元素

我在我的应用程序中使用EF。

我尝试保存\插入一个新的logging到映射表

并得到以下错误:

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中定义它吗? 怎么样?

我的多对多映射表丢失了PK

补充,问题解决了。

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

当EF映射与没有主键的表完成时,它被认为是一个视图和视图是逻辑实体,不能被更新。

因此,无论在你的表中添加缺less的主键,或者将它们视为View&dont不要对它们执行任何更新操作。

如果你的视图是可更新的,那么你可以直接从你的.edmx的StorageModel部分的视图的EntitySet定义中移除该元素,正常的更新处理将和其他表一样工作。

这是我的情况。 简单地删除导致另一个错误。 除了最后一个,我跟着这篇文章的步骤。 为了方便起见,我复制了后面的四个步骤来解决问题,如下所示:

  1. 右键单击edmx文件,select打开方式,XML编辑器
  2. 在edmx:StorageModels元素中find实体
  3. 完全删除DefiningQuery
  4. 重命名商店:Schema =“dbo”为Schema =“dbo”(否则,代码将产生一个错误,表明该名称是无效的)
  1. 右键单击edmx文件,select打开方式,XML编辑器

  2. 在edmx:StorageModels元素中find实体

  3. 完全删除DefiningQuery

  4. 重命名store:Schema="dbo"Schema="dbo" (否则,代码会生成一个错误,说名称无效)这些步骤对我有效

我在可更新的视图中遇到了这个问题。 发现这篇文章解决了我的问题。

因此,我的视图的基础表没有定义主键,但是EF不知道哪些列在PK中,因为实体是在视图上构build的。 这里的诀窍是“说服”EF,你的观点可以更新为表。 步骤与上述答案几乎相同:

  1. 右键单击edmx文件,select打开方式,XML编辑器
  2. 在edmx:StorageModels元素中find实体
  3. 完全删除<DefiningQuery>部分
  4. 重命名商店:Schema =“dbo”到Schema =“dbo”
  5. 更改store:Type="Views"store:Type="Tables"

**重新检查你的表没有PK:**只是添加主键,然后删除并重新添加表到EDMX然后它应该工作

确保你的外键表没有多个与引用表中的列匹配的列名; 只有主键应该在您的裁判桌和裁判桌之间进行匹配。 0..1应该有明确的列名称,为您的列开发命名约定,以确保引用和引用表没有多个匹配的列名。 由ALMwConsult.net提供

如果你没有在你的表中处理主键,那么在更新和插入logging数据库的时候,这个问题肯定会出现在MVC中

DbUpdateexception是由用户未处理的

使用db第一个mvc应用程序。 问题是我忘了定义表的主键。 解决方法是使用alter命令添加主键并更新DAL(edmx)