【问题标题】:while updating a table using Entity Framework I get the error:"Cannot update identity column..."使用实体框架更新表时出现错误:“无法更新标识列...”
【发布时间】:2016-10-30 22:38:31
【问题描述】:

使用 Visual Studio 2012 v.11 更新 4 .Net 4.5.5 倍

我试图从 Gridview 界面简单地更新我的数据库中的一个表,但我得到了上述错误。 我的字段是一个整数自动增量标识字段,但我的 PK 是 ID 列,即 GUID。 问题是为什么 entityframework 应该尝试更新 DB 中在其属性中设置为“身份”的字段?

尝试从同一个网格视图控件在同一个表上插入或删除记录时,我没有收到任何错误 提前 tnx。

【问题讨论】:

    标签: mysql asp.net entity-framework


    【解决方案1】:

    有两种可能:

    1st:您不小心更新了 PK。这是可能的,因为您的 PK 是您提到的 GUID。

    第二个:EF 假设它必须为记录创建一个 PK。

    第一种情况的解决方案是跟踪过程以查看意外创建 PK 的位置。如果是第二种情况,请在DbContext中的PK上使用以下内容:

     .ValueGeneratedNever(); // EF Core 
      Example:
      entity.Property(e => e.PK).ValueGeneratedNever();
    

    [DatabaseGenerated(DatabaseGeneratedOption.None)] EF6
    public GUID PK {get; set;}
    

    【讨论】:

    • 感谢您的回复。 :) 1) 对于您的第一种可能性:我没有尝试更新 PK,我使用的是 GridView 控件,但我怀疑它是否会这样做,因为在错误消息中,列名是:“..无法更新身份列 [humanID ] 我不知道如何查看 PK 是在哪里创建的?我没弄明白!
    • 2) 为什么 EF 必须假设?因为我的 PK 也被标记为主键? {我没有尝试这个,因为我决定安装和使用 VS2015 的 EF 有其他有趣的错误}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多