Entity Framework Core 尝试更新模型中标记为 Identity 的列

SBF*_*ies 3 c# sql-server entity-framework identity-column ef-core-2.0

我有一个数据库表,其中一列是一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; }
}
Run Code Online (Sandbox Code Playgroud)

尽管有注释,当我对表进行更新时,我发现生成的 SQL 尝试更新列IDENTITY

UPDATE [Model] SET ... [AnotherId] = @p10 ...
WHERE [Id] = @p29;
SELECT @@ROWCOUNT;
Run Code Online (Sandbox Code Playgroud)

这显然失败了,导致抛出异常。我正在使用 Entity Core 2.0,目前无法升级到 2.1。有什么想法为什么数据注释被忽略吗?

Nug*_*son 5

我在 EF Core 3.1 中的解决方案是这样的:

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

如果没有 ValueGenerateOnAddOrUpdate() ,我在更新现有记录时会看到与OP相同的错误。因此,看起来 UseIdentityColumn() 相当于调用 ValueGenerateOnAdd()。