为什么我的实体主键在更新实体后显示被修改?
Why my entity primary key shows to be modified after updating entity?
我有一个 class ApplicationUser
继承自 IdentityUser
。我添加了 属性 LastLoggedIn
这是 OffsetDateTime
数据类型,并且我在对 API 的每个请求中修改它。此外,我正在使用 entityframework 中的 Audit
plus 来记录用户 add/update/delete 操作,这就是我遇到此问题的方式。每次更新 ApplicationUser
实体的 LastLoggedIn
属性 时,我都可以看到 Id
属性 也已修改,显示相同的旧值和新值。为什么我的主键在这里被修改?
我贴出相关代码,
public class ApplicationUser : IdentityUser {
[Required, StringLength(50)]
[Display (Name = "First Name")]
public string FirstName { get; set; }
public OffsetDateTime? LastLoggedIn { get; set; }
}
调用实体的方法,由于class继承自IdentityUser
,我用的是UserManager
public async Task UpdateUserLastActivityDateAsync (string userId, string timeZone) {
var user = await userManager.FindByIdAsync(userId);
user.LastLoggedIn = timeZone.GetInstantOffsetDateTime();
await unitOfWork.CompleteAsync(); // = context.SaveChangesAsync();
}
我尝试了以下但出现异常,
builder.Entity<ApplicationUser>()
.Property(e => e.Id)
.ValueGeneratedOnAddOrUpdate()
.Metadata.BeforeSaveBehavior = PropertySaveBehavior.Ignore;
The property 'Id' cannot be configured as 'ValueGeneratedOnUpdate' or
'ValueGeneratedOnAddOrUpdate' because the key value cannot be changed
after the entity has been added to the store.
键 属性 不能被设计忽略。
那是因为能够检索更改背后的行。没有密钥,您将无法知道修改了哪个ApplicationUser。
我有一个 class ApplicationUser
继承自 IdentityUser
。我添加了 属性 LastLoggedIn
这是 OffsetDateTime
数据类型,并且我在对 API 的每个请求中修改它。此外,我正在使用 entityframework 中的 Audit
plus 来记录用户 add/update/delete 操作,这就是我遇到此问题的方式。每次更新 ApplicationUser
实体的 LastLoggedIn
属性 时,我都可以看到 Id
属性 也已修改,显示相同的旧值和新值。为什么我的主键在这里被修改?
我贴出相关代码,
public class ApplicationUser : IdentityUser {
[Required, StringLength(50)]
[Display (Name = "First Name")]
public string FirstName { get; set; }
public OffsetDateTime? LastLoggedIn { get; set; }
}
调用实体的方法,由于class继承自IdentityUser
,我用的是UserManager
public async Task UpdateUserLastActivityDateAsync (string userId, string timeZone) {
var user = await userManager.FindByIdAsync(userId);
user.LastLoggedIn = timeZone.GetInstantOffsetDateTime();
await unitOfWork.CompleteAsync(); // = context.SaveChangesAsync();
}
我尝试了以下但出现异常,
builder.Entity<ApplicationUser>()
.Property(e => e.Id)
.ValueGeneratedOnAddOrUpdate()
.Metadata.BeforeSaveBehavior = PropertySaveBehavior.Ignore;
The property 'Id' cannot be configured as 'ValueGeneratedOnUpdate' or 'ValueGeneratedOnAddOrUpdate' because the key value cannot be changed after the entity has been added to the store.
键 属性 不能被设计忽略。
那是因为能够检索更改背后的行。没有密钥,您将无法知道修改了哪个ApplicationUser。