2013-03-10 151 views
42

我在我的应用程序中使用EF。,因为它有一个DefiningQuery,并且<ModificationFunctionMapping>元素中不存在<InsertFunction>元素

我尝试保存\插入新记录到映射表

,并出现以下错误:

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定义它自己?怎么样?

回答

78

我的许多一对多映射表不见了PK

增加,这个问题就解决了。

+1

我有同样的问题,但我不确定选择哪个列作为主键,因为在所有的文章中都说映射表必须是只有两个外键的表,添加一些列只会毁掉这么多 - 一对多的关系。我有例如两个表项目和客户端和Project_Client表,其中有两个列的外键,一个ProjectId第二个ClientId。所以,我必须设置主键? – GeekyNuns 2016-08-02 13:41:49

+4

@GeekyNuns,都是 – 2016-09-27 15:49:43

32

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

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

因此,无论是在主表中添加缺少的主键或将它们视为查看&不要对它们执行任何更新操作。

+0

,所以如果你想插入或更新这样的表(Audit table)使用触发器代替 – 2017-11-07 22:40:15

20

If your view is updatable you can simply remove the element from the EntitySet definition for your view inside of the StorageModel section of your .edmx, and the normal update processing will work as with any other table.

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

  1. 右键单击EDMX文件,选择打开方式,XML编辑器
  2. 找到实体的EDMX :StorageModels元件
  3. 卸下DefiningQuery完全
  4. 重命名存储:架构= “DBO” 到架构= “DBO”(否则,代码将产生一个错误说的名称是无效的)
+0

那可以,谢谢! – Aaaaaaaa 2015-11-11 07:14:32

+0

还考虑在实际数据库模式中更改'edmx:StorageModels/Schema/EntityContainer @ Name'和'edmx:Mappings/Mapping/EntityContainerMapping @ StorageEntityContainer'属性 - 这对我有帮助。 – 2017-10-10 10:03:16

+0

谢谢,在我需要它的时候,我不会得到这个。并非所有的表都需要有主键。 – gsirianni 2018-01-28 07:11:59

4
  1. 右键单击EDMX文件,选择打开方式,XML编辑器

  2. 找到在EDMX实体:StorageModels元素

  3. 取出DefiningQuery完全

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

1

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

2

**请重新检查表中没有PK:**只需添加主键,然后删除并重新添加表EDMX那么它应该工作

1

如果你不处理你的表的主键然后同时更新和插入记录数据库

的dbupdate异常是由用户

3

未处理我碰到这个问题来了一个更新的看待这个问题 肯定会发生在MVC。找到this article解决了我的问题。

因此,我的视图的底层表具有定义的主键,但EF并不知道哪些列在PK中,因为实体是在视图上构建的。这里的诀窍是“说服”EF,您的视图可以更新为表格。 步骤几乎相同。通过上面的答案中提到:

  1. 右键单击EDMX文件,选择打开方式,XML编辑器
  2. 找到在EDMX实体:StorageModels元素
  3. 取出<DefiningQuery>节完全
  4. 重命名存储:架构= “DBO” 到架构= “DBO”
  5. 变化store:Type="Views"store:Type="Tables"
+0

谢谢你这样做!我希望有人可以解释如何创建插入/更新功能,但也... – JDPeckham 2017-09-29 22:19:06

0

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

0

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

相关问题