这件事让我发疯,这个错误对我来说毫无意义:
无法更新EntitySet'TableB',因为它有一个DefiningQuery,元素中不存在支持当前操作的元素。
我的表格是这样的:
TableA int idA (identity, primary key) ... TableB int idA (FK for TableA.idA) int val
TableB在SQL Server中没有定义的主键。实体框架已导入表和关联,并将两个字段都设置为键。但是当我尝试插入表格时它会输出错误!
怎么了?
修改 正如亚历克斯所建议的,解决方案就是:
我按原样保留了密钥,因为对我来说这两个列都是密钥的一部分。
答案 0 :(得分:140)
当遇到没有PrimaryKey的表时,它被视为View。
视图显示在StorageModel \ EntitySet [n] \ DefiningQuery元素的EDMX文件中(在XML编辑器中打开)。
当您拥有DefiningQuery时,除非您添加修改功能,否则实体将变为只读。您需要3个修改函数(也称为存储过程),每个函数对应一个插入,更新和删除。
但你有两个选择:
更改密钥定义:
在你的情况下,我建议(1)。
答案 1 :(得分:12)
只需向表中添加主键即可。而已。问题解决了。
ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
答案 2 :(得分:5)
我在桌子上丢失了一个主键并收到此错误消息。我注意到的一件事是在我将密钥添加到表后,我需要使用设计器清除edmx中的表,保存edmx,然后再次更新它以重新添加表。它没有拿起密钥因为它已被指定为视图。这不需要手动编辑edmx。
答案 3 :(得分:3)
将主键添加到表中,从edmx模型中删除模型,然后从数据库中选择更新,构建并运行......工作
答案 4 :(得分:1)
@Palantir。验证两个表都设置了主键,并注意表中设置的多个主键。
答案 5 :(得分:0)
希望它将解决问题。