因为它有一个DefiningQuery而没有元素存在于ModificationFunct

本文关键字:InsertFunction 元素 存在 ModificationFunct 有一个 DefiningQuery 因为 | 更新日期: 2023-09-27 18:03:07

我在我的应用程序中使用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中定义它吗?如何?

因为它有一个DefiningQuery而没有<InsertFunction>元素存在于ModificationFunct

我的多对多映射表缺少PK

添加

,问题解决了

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

对没有主键的表进行EF映射时,它被视为视图。因为视图是逻辑实体,所以它们不能被更新。

因此,要么将缺失的主键添加到表中,要么将它们视为视图&

如果你的视图是可更新的,你可以简单地删除属性中视图的EntitySet定义中的元素.edmx的StorageModel部分,以及正常的更新处理

这就是我的情况。简单地删除会导致另一个错误。除了最后一个,我遵循了这篇文章的步骤。为了您的方便,我从帖子中复制了我解决问题的4个步骤,如下:

    右键单击edmx文件,选择Open with, XML editor
  1. 在edmx:StorageModels元素中找到实体
  2. 完全移除DefiningQuery
  3. 将存储:Schema="dbo"重命名为Schema="dbo"(否则,代码将生成一个错误,说名称无效)

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

所以我的视图的底层表确实定义了主键,但是EF不知道哪些列在PK中,因为实体是建立在视图上的。这里的技巧是"说服"EF你的视图可以被更新为一个表。步骤与上面的答案几乎相同:

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

  2. 查找edmx:StorageModels元素中的实体

  3. 完全删除DefiningQuery

  4. store:Schema="dbo"重命名为Schema="dbo"(否则,代码将生成一个错误,说名称无效)

我的表在sql表设计中没有主键。添加并解决

确保你的外键表中没有多个列名与引用表中的列相匹配;只有主键应该在参考表和参考表之间匹配。0 . .应该有不同的列名,为列制定命名约定,以确保引用表和被引用表没有多个匹配的列名。由ALMwConsult.net提供

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

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

DbUpdate Exception被user

正在开发db first mvc应用程序。问题是我忘记为表定义主键。通过使用alter命令添加主键并更新DAL(edmx)

解决
相关文章:
  • 没有找到相关文章