[英]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;
我在 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.