首页 > 解决方案 > .NET 5 - 防止更新自动增量列?

问题描述

我正在尝试在名为 MembershipID 的身份用户表上创建一个自动增量字段,但我遇到了一些问题。

我将身份用户子类化并创建了自己的“ApplicationUser”,因此我可以添加其他字段,这一切都很好。

应用程序用户.cs

public class ApplicationUser : IdentityUser
{
    public int Currency { get; set; }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int membershipID { get; set; }
    public string Name { get; set; }


}

(注意 - 我已经尝试过使用和不使用 [key] 注释)。

问题 该字段在模型创建时生成并自动递增。但是,每次我更新模型时,比如说名称,我都会收到一条错误消息:

SqlException:无法更新标识列“membershipID”。

这是为什么?我认为通过说它是数据库生成的值它不会这样做吗?如何防止它更新列?我不是在尝试编辑自动递增字段,而是在编辑另一列,但不知何故它也尝试更新导致问题的其他字段。

谢谢大家。

标签: c#asp.net.netsql-serverasp.net-core

解决方案


我发现以前有人报告过类似的问题。如果您使用核心 3.1,请尝试在 OnModelCreating 方法中添加类似的内容:

modelBuilder.Entity<ApplicationUser>().Property(u => u.membershipID).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);

这是类似的问题 -无法更新 Entity Framework Core 中的标识列。您可以在那里找到早期版本核心的解决方案。


推荐阅读