它有一个DefiningQuery,但没有InsertFunction元素…错误
这件事让我发疯,而这个错误对我来说是毫无意义的:
无法更新EntitySet“TableB”,因为它具有DefiningQuery,并且元素中不存在用于支持当前操作的元素。
我的桌子是这样放的:
表A int idA(身份,主键) ... 表B int idA(TableA.idA的FK) int val
TableB在SQL服务器中没有定义的主键。 entity framework已导入表和关联,并将这两个字段设置为关键字。 但是当我尝试插入表格时会输出错误!
怎么了??
编辑:正如亚历克斯build议,解决scheme是这样的:
- 右键单击edmx文件,select打开方式,XML编辑器
- 在edmx:StorageModels元素中find实体
- 完全删除DefiningQuery
- 重命名商店:Schema =“dbo”为Schema =“dbo”(否则,代码将产生一个错误,表明该名称是无效的)
- 删除商店:名称属性
我把钥匙保持原样,因为对我来说两列都是钥匙的一部分。
那么当没有一个PrimaryKey的情况下遇到一个表,它将被视为一个View。
并且在StorageModel \ EntitySet [n] \ DefiningQuery元素的EDMX文件中显示(在XML编辑器中打开以查看)视图。
当你有一个定义查询的实体变成只读,除非你添加修改function。 每个插入,更新和删除需要3个修改function(又名存储过程)。
但是你有两个select:
更改关键定义:
- 说服EF,它认为是一个观点,真的是一个表
- 或者添加适当的修改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两个表中是否设置了主键,并小心处理表中设置的多个主键。