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

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

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

我的桌子是这样放的:

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

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

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

怎么了??


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

  • 右键单击edmx文件,选择Open with,XML编辑器
  • 在edmx:StorageModels元素中找到实体
  • 完全删除DefiningQuery
  • 重命名商店:Schema =“dbo”为Schema =“dbo”(否则,代码将生成一个错误,表明该名称无效)
  • 删除商店:名称属性
  • 我将钥匙保持原样,因为对我来说两列都是钥匙的一部分。


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

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

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

    但是你有两个选择:

    更改关键定义:

  • 并说服EF认为它是一个视图真的是一张桌子
  • 或者添加适当的修改功能
  • 在你的情况下,我建议(1)。


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

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

    我错过了我的桌子上的主键,并得到了这个错误信息。 我注意到的一件事是在将密钥添加到表中之后,我需要使用设计器从edmx清除表,保存edmx,然后再次更新以添加表。不是拾取密钥因为它已被分配为视图。 这不需要手动编辑edmx。

    链接地址: http://www.djcxy.com/p/64919.html

    上一篇: It has a DefiningQuery but no InsertFunction element... err

    下一篇: Insert Records into Sqlite DB using ADO.NET Entity Framework?