因为它有一个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定义中移除该元素,正常的更新处理将和其他表一样工作。
这是我的情况。 简单地删除导致另一个错误。 除了最后一个,我跟着这篇文章的步骤。 为了方便起见,我复制了后面的四个步骤来解决问题,如下所示:
- 右键单击edmx文件,select打开方式,XML编辑器
- 在edmx:StorageModels元素中find实体
- 完全删除
DefiningQuery
- 重命名商店:Schema =“dbo”为Schema =“dbo”(否则,代码将产生一个错误,表明该名称是无效的)
-
右键单击edmx文件,select打开方式,XML编辑器
-
在edmx:StorageModels元素中find实体
-
完全删除DefiningQuery
-
重命名
store:Schema="dbo"
为Schema="dbo"
(否则,代码会生成一个错误,说名称无效)这些步骤对我有效
我在可更新的视图中遇到了这个问题。 发现这篇文章解决了我的问题。
因此,我的视图的基础表没有定义主键,但是EF不知道哪些列在PK中,因为实体是在视图上构build的。 这里的诀窍是“说服”EF,你的观点可以更新为表。 步骤与上述答案几乎相同:
- 右键单击edmx文件,select打开方式,XML编辑器
- 在edmx:StorageModels元素中find实体
- 完全删除
<DefiningQuery>
部分 - 重命名商店:Schema =“dbo”到Schema =“dbo”
- 更改
store:Type="Views"
来store:Type="Tables"
**重新检查你的表没有PK:**只是添加主键,然后删除并重新添加表到EDMX然后它应该工作
确保你的外键表没有多个与引用表中的列匹配的列名; 只有主键应该在您的裁判桌和裁判桌之间进行匹配。 0..1应该有明确的列名称,为您的列开发命名约定,以确保引用和引用表没有多个匹配的列名。 由ALMwConsult.net提供
如果你没有在你的表中处理主键,那么在更新和插入logging数据库的时候,这个问题肯定会出现在MVC中
DbUpdateexception是由用户未处理的
使用db第一个mvc应用程序。 问题是我忘了定义表的主键。 解决方法是使用alter命令添加主键并更新DAL(edmx)