在MSSQL數據庫中,我有一個名爲AutoIncrementNumber 其配置了此提到爲什麼EF核心忽略自動增量列並嘗試更新它?
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:更新時發生錯誤t他參賽。詳情請參閱內部例外。 SQLEXCEPTION:無法更新標識列「AutoIncrementNumber」
項目正在.NET核心上運行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]
您還可以添加我們在CreateAsync和UpdateAsync方法中做什麼? –
我使用_userManager = UserManager()提供的標準方法 –
@GurgenSargsyan'ValueGeneratedOnAdd'並不意味着'IDENTITY',這意味着該值將在添加列時由服務器生成。它沒有說更新的任何內容。它可以是IDENTITY,也可以使用SEQUENCE的默認值。你在這裏做什麼是不常見的。 EF在自動生成的* key *屬性中工作得很好。您正在使用'AutoIncrementNumber',就好像它是一個計算列雖然 –