代码之家  ›  专栏  ›  技术社区  ›  Palantir

它有一个定义查询,但没有insertfunction元素…err

  •  121
  • Palantir  · 技术社区  · 16 年前

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

    无法更新entityset“tableb”,因为它有一个definingquery,并且元素中不存在支持当前操作的元素。

    我的桌子是这样摆放的:

    TableA
    int idA (identity, primary key)
    ...
    
    TableB
    int idA (FK for TableA.idA)
    int val
    

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

    发生了什么?是吗?


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

    1. 右键单击EDMX文件,选择“用XML编辑器打开”
    2. 在edmx:storagemodels元素中定位实体
    3. 完全删除定义查询
    4. 将store:schema=“dbo”重命名为schema=“dbo”(否则,代码将生成一个错误,说明名称无效)
    5. 删除store:name属性

    我保留了原来的键,因为这两列都是键的一部分对我来说是正常的。

    5 回复  |  直到 9 年前
        1
  •  140
  •   Kit    14 年前

    当遇到一个没有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)。

        2
  •  12
  •   Jebastin J    13 年前

    只需向表中添加主键即可。就是这样。问题解决了。

    ALTER TABLE <TABLE_NAME>
    ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
    
        3
  •  5
  •   mlapaglia    12 年前

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

        4
  •  3
  •   user4584103    9 年前

    向表中添加主键,从EDMX模型中删除模型,然后选择从数据库中更新,生成并运行……作品

        5
  •  1
  •   Paulo 'PaulusHC' Gomes    11 年前

    Palangr。验证两个表都设置了主键,并注意表中设置了多个主键。

    推荐文章