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

Pal*_*tir 123 asp.net entity-framework

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

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

我的表格是这样的:

TableA
int idA (identity, primary key)
...

TableB
int idA (FK for TableA.idA)
int val

TableB在SQL Server中没有定义的主键.实体框架已导入表和关联,并将两个字段都设置为键.但是当我尝试插入表格时它会输出错误!

怎么了??


编辑: 正如亚历克斯所建议的,解决方案是:

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

我把钥匙保留原样,因为对我来说两列都是钥匙的一部分是可以的.

Ale*_*mes 141

当遇到没有PrimaryKey的表时,它被视为View.

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

当你有一个DefiningQuery时,除非你添加修改函数,否则实体会变为只读.您需要3个修改函数(也称为存储过程),每个函数对应一个插入,更新和删除.

但是你有两个选择:

改变关键定义:

  1. 并且说服EF认为它认为的观点实际上是一张桌子
  2. 或者添加适当的修改功能

在你的情况下,我建议(1).


小智 13

只需向表中添加主键即可.而已.问题解决了.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
Run Code Online (Sandbox Code Playgroud)


mla*_*lia 6

我在桌子上丢失了一个主键,并收到此错误消息.我注意到的一件事是在我将密钥添加到表后,我需要使用设计器清除edmx中的表,保存edmx,然后再次更新它以重新添加表.它没有拿起密钥因为它已被指定为视图.这不需要手动编辑edmx.


小智 5

将主键添加到表,从edmx模型中删除模型,然后从数据库中选择更新,构建并运行......