簡體   English   中英

Entity Framework Core 嘗試更新模型中標記為 Identity 的列

[英]Entity Framework Core attempting to update column marked as Identity in model

我有一個數據庫表,其中一列是IDENTITY列(不是手動設置的主鍵)。 我的 EF Core 模型如下所示:

public class Model
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }

    ...Other fields...

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int AnotherId { get; set; }
}

盡管有注釋,但當我對表進行更新時,我發現生成的 SQL 嘗試更新IDENTITY列:

UPDATE [Model] SET ... [AnotherId] = @p10 ...
WHERE [Id] = @p29;
SELECT @@ROWCOUNT;

這顯然失敗了,導致拋出異常。 我正在使用 Entity Core 2.0,目前無法升級到 2.1。 為什么數據注釋被忽略的任何想法?

Context類的OnModelCreating中嘗試Fluent API 像這樣的東西:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
    .Entity<Model>()
    .Property(c => c.AnotherId )
    .UseSqlServerIdentityColumn();
}

同樣在 EF Core 2 中,它應該是這樣的:

modelBuilder.Property(c => c.AnotherId).UseSqlServerIdentityColumn();
modelBuilder.Property(p => p.AnotherId )
            .Metadata.AfterSaveBehavior = PropertySaveBehavior.Ignore;

您可能要使用的屬性是:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

根據文檔

我在 EF Core 3.1 中的解決方案是:

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<YourTableName>().Property(c => c.YourPropertyName).UseIdentityColumn().ValueGeneratedOnAddOrUpdate();
    }

如果沒有 ValueGeneratedOnAddOrUpdate(),我在更新現有記錄時看到了與 OP 相同的錯誤。 因此,看起來 UseIdentityColumn() 等效於調用 ValueGeneratedOnAdd()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM