它有一个 Definition ingQuery 但是没有 InsertFunction 元素... err

这件事快把我逼疯了,这个错误对我来说毫无意义:

无法更新 EntitySet‘ TableB’,因为它有一个 Definition ingQuery,而且元素中不存在支持当前操作的元素。

My tables are put like this:

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


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

TableB has no defined primary key in the SQL server. The Entity Framework has imported the table and the association and set both fields as key. But it will output that error when I try to do an insert into the table!

What's wrong??


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

  1. 右键单击 edmx 文件,选择 Open with,XML Editor
  2. 在 edmx: StorageModel 元素中找到该实体
  3. Remove the DefiningQuery entirely
  4. 重命名存储: Schema = “ dbo”为 Schema = “ dbo”(否则,代码将生成一个错误,说明名称无效)
  5. 删除 store: Name 属性

我让键保持原样,因为对我来说两列都是键的一部分是可以的。

70993 次浏览

当遇到一个没有 PrimaryKey 的表时,它被视为一个 View。

视图显示在 StorageModelEntitySet [ n ] Definition ingQuery 元素的 EDMX 文件中(在 XML 编辑器中打开可查看)。

当您有一个 Definition ingQuery 时,除非您添加修改函数,否则该实体将变为只读。您需要3个修改功能(又名存储过程) ,每个插入,更新和删除。

但你有两个选择:

Change the key definion:

  1. 让 EF 相信它认为的视图其实是一张表
  2. 或添加适当的修改函数

对于你的情况,我建议(1)。

@ Palantir.验证两个表是否都设置了主键,并注意在一个表中设置了多个主键。

Just Add a primary key to the table. That's it. Problem solved.

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

我的表上缺少一个主键,因此得到了这个错误消息。我注意到,在向表添加键之后,我需要使用设计器清除 edmx 中的表,保存 edmx,然后再次更新它以将表添加回来。它没有拾取密钥,因为它已经被分配为一个视图。这不需要手动编辑 edmx。

向表中添加主键,从 edmx 模型中删除模型,然后从数据库中选择 update,构建并运行... ..。工程

  1. 您需要在记事本或记事本 + + 或 在任何你选择的文本编辑器。
  2. 在第1步中打开的文件中找到 edmx: StorageModel 中的条目。
  3. 找到 Definition ingQuery 元素并完全删除此标记。
  4. 查找存储: Schema = “ dbo”到 Schema = “ dbo”(如果跳过这一步的话) 它将生成名称无效的错误)。
  5. 保存并关闭文件。

希望它能解决这个问题。