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

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

我的 table 是这样放置的:

表A
int idA(身份,主键)
...

表B
int idA (FK for TableA.idA)
整数值

TableB 在 SQL Server 中没有定义主键。 Entity Framework 已导入表和关联并将这两个字段设置为键。但是当我尝试插入表时它会输出该错误!

怎么了??

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

  • 右击edmx文件,选择打开方式,XML编辑器
  • 在 edmx:StorageModels 元素中找到实体
  • 完全删除DefiningQuery
  • 将 store:Schema="dbo"重命名为 Schema="dbo"(否则代码会报错说名称无效)
  • 删除 store:Name 属性

  • 我把 key 留在原处,因为两列都是 key 的一部分对我来说是可以的。

    最佳答案

    好吧,当遇到没有主键的表时,它被视为 View 。
    View 显示在 StorageModel\EntitySet[n]\DefiningQuery 元素中的 EDMX 文件(在 XML 编辑器中打开以查看)中。
    当您拥有 DefiningQuery 时,实体将变为只读,除非您添加修改功能。您需要 3 个修改函数(又名存储过程),分别用于插入、更新和删除。
    但是你有两个选择:
    更改 key 定义:

  • And convince the EF that what it thinks is a view is really a table
  • 或者添加相应的修改函数

  • 在你的情况下,我推荐(1)。

    关于asp.net - 它有一个 DefiningQuery 但没有 InsertFunction 元素......错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1589166/

    10-12 18:49