在mssql数据库中,我有一个名为 AutoIncrementNumber 的自动增量列 配置了这个提到的
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(entity =>
{
entity.Property(e =>e.AutoIncrementNumber).ValueGeneratedOnAdd();
}
}
我添加了一个新用户并希望更新此
var user = new User { UserName = "SomeUserName", Code=0};
var result = await _userManager.CreateAsync(user, "SomePassword");
//after CreateAsync user.AutoIncrementNumber == 1
if (result.Succeeded)
{
user.Code = 1;
userManager.UpdateAsync(user);
}
但在UpdateAsync期间我遇到了错误
DbUpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常 SqlException:无法更新标识列&#39; AutoIncrementNumber&#39;
项目正在.net core 1.1下运行
SQL架构
CREATE TABLE [dbo].[AspNetUsers](
[Id] [nvarchar](450) NOT NULL,
[UserName] [nvarchar](256) NULL,
[AutoIncrementNumber] [int] IDENTITY(1,1) NOT NULL,
[ReferralCode] [nvarchar](50) NULL,
CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED (
[Id] ASC )WITH (
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
答案 0 :(得分:4)
ValueGeneratedOnAdd表示数据库在插入对象时生成,插入时应忽略该属性。
您应该使用ValueGeneratedOnAddOrUpdate来指定该值也应该从UPDATE中排除。
使用数据注释,相当于ValueGeneratedOnAddOrUpdate
的是[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
。等同于ValueGeneratedOnAdd
的是[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
检查Microsoft Docs中的Generated Values部分。