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

Ela*_*nda 54 .net c# 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中定义它吗?怎么样?

Ela*_*nda 91

我的多对多映射表缺少PK

补充说,问题解决了.

  • @GeekyNuns,两者 (5认同)
  • 我有同样的问题,但是我不确定要选择哪个列作为主键,因为在所有文章中都说映射表必须是只有两个外键的表,添加一些列只会破坏这个多对多关系关系。例如,我有两个表Projects和Clients和Project_Client表,其中两列的外键在ClientId上第二个指向ProjectId。那么我必须在哪里设置主键? (2认同)

Bik*_*iki 38

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

当使用没有主键的表完成EF映射时,它被视为逻辑enity的视图和视图,无法更新.

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


小智 26

如果您的视图是可更新的,则只需从.edmx的StorageModel部分内的视图的EntitySet定义中删除该元素,并且正常更新处理将与任何其他表一样工作.

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

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


wct*_*ger 7

我以可更新的观点遇到了这个问题。发现本文解决了我的问题。

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

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