它有一个DefiningQuery,但没有InsertFunction元素…错误

这件事让我发疯,而这个错误对我来说是毫无意义的:

无法更新EntitySet“TableB”,因为它具有DefiningQuery,并且元素中不存在用于支持当前操作的元素。

我的桌子是这样放的:

表A
 int idA(身份,主键)
 ...

表B
 int idA(TableA.idA的FK)
 int val

TableB在SQL服务器中没有定义的主键。 entity framework已导入表和关联,并将这两个字段设置为关键字。 但是当我尝试插入表格时会输出错误!

怎么了??


编辑:正如亚历克斯build议,解决scheme是这样的:

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

我把钥匙保持原样,因为对我来说两列都是钥匙的一部分。

那么当没有一个PrimaryKey的情况下遇到一个表,它将被视为一个View。

并且在StorageModel \ EntitySet [n] \ DefiningQuery元素的EDMX文件中显示(在XML编辑器中打开以查看)视图。

当你有一个定义查询的实体变成只读,除非你添加修改function。 每个插入,更新和删除需要3个修改function(又名存储过程)。

但是你有两个select:

更改关键定义:

  1. 说服EF,它认为是一个观点,真的是一个表
  2. 或者添加适当的修改function

在你的情况下,我build议(1)。

只需将一个主键添加到表中。 而已。 问题解决了。

ALTER TABLE <TABLE_NAME> ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>) 

我错过了我的桌子上的主键,并得到这个错误信息。 我注意到的一件事是我添encryption钥到表后,我需要使用devise器从EDMX清除表,保存EDMX,然后再次更新它添加表返回。它不是拿起钥匙因为它已经被指定为一个视图。 这不需要手动编辑edmx。

将主键添加到表中,从edmx模型中删除模型,然后从数据库中select更新,生成并运行…… works

@Palantir。 validation两个表中是否设置了主键,并小心处理表中设置的多个主键。