【问题标题】:It has a DefiningQuery but no InsertFunction element... err它有一个 DefiningQuery 但没有 InsertFunction 元素...错误
【发布时间】:2010-12-08 00:45:54
【问题描述】:

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

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

我的桌子是这样摆放的:

表A int idA(身份,主键) ... 表B int idA(表 A.idA 的 FK) 整数值

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

怎么了??


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

  1. 右击edmx文件,选择打开方式,XML编辑器
  2. 在 edmx:StorageModels 元素中找到实体
  3. 完全删除 DefiningQuery
  4. 将 store:Schema="dbo" 重命名为 Schema="dbo"(否则代码会生成错误,提示名称无效)
  5. 删除 store:Name 属性

我保留了原来的密钥,因为我认为两列都是密钥的一部分。

【问题讨论】:

  • 感谢您的更新 - 分步说明帮助这个 EF 新手让 ASP.NET MVC 教程应用程序正常工作!
  • 谢谢!我遇到了一个问题,即 EF 没有为具有主键的 sql server 2000 表生成正确的 edmx 文件。但是这条指令救了我:)
  • 3.5 年后,这篇文章仍在帮助人们,在这种情况下,我! ...致:Palantir 一步一步的描述(它有效),感谢 Alex >>> Bravo!
  • 该解决方案对我有用.. 谢谢
  • 秘密是从架构定义中删除“存储:”。很不错

标签: asp.net entity-framework


【解决方案1】:

当遇到没有 PrimaryKey 的表时,它会被视为视图。

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

当您有 DefiningQuery 时,实体变为只读,除非您添加修改函数。您需要 3 个修改函数(也称为存储过程),分别用于插入、更新和删除。

但是你有两个选择:

更改键定义:

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

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

【讨论】:

  • 我在尝试将实体添加到联结表时收到此错误。你的建议解决了,谢谢!
  • 不要忘记首先在从数据库生成的 .edmx 文件上单击“从数据库更新模型”
  • 我遇到了同样的问题,奇怪的是,它在我们的本地和测试环境中运行良好,只是在客户端环境中无法运行(无聊)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我的表中缺少主键并收到此错误消息。我注意到的一件事是,在将密钥添加到表格后,我需要使用设计器从 edmx 中清除表格,保存 edmx,然后再次更新以重新添加表格。它没有拾取密钥因为它已经被指定为视图。这不需要手动编辑 edmx。

    【讨论】:

      【解决方案4】:

      向表添加主键,从edmx模型中删除模型,然后从数据库中选择更新,构建并运行……工作

      【讨论】:

        【解决方案5】:

        @Palantir。验证您的两个表都设置了主键,并小心在一个表中设置了多个主键。

        【讨论】:

          【解决方案6】:
          1. 您需要在记事本或记事本++ 中手动打开 .EDMX 文件或 在您选择的任何文本编辑器中。
          2. 在步骤 1 中打开的文件中找到 edmx:StorageModels 中的条目。
          3. 找到 DefiningQuery 元素并完全删除此标记。
          4. 找到存储:Schema="dbo" 到 Schema="dbo"(如果跳过此步骤 会产生名称无效的错误)。
          5. 保存并关闭文件。

          希望它能解决问题。

          【讨论】:

            猜你喜欢
            • 2013-02-25
            • 2012-11-30
            • 2011-11-26
            • 1970-01-01
            • 2011-01-31
            • 2012-09-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-12
            相关资源
            最近更新 更多