代码之家  ›  专栏  ›  技术社区  ›  JSON

为什么我的实体主键在更新实体后显示为要修改?

  •  0
  • JSON  · 技术社区  · 7 年前

    我有一节课 ApplicationUser 继承自 IdentityUser . 我添加了属性 LastLoggedIn 哪个是 OffsetDateTime 数据类型,我用对api的每个请求修改它。而且,我正在使用 Audit 从EntityFrameworkPlus到日志用户添加/更新/删除操作,这就是我遇到这个问题的原因。每次我更新 应用程序用户 实体的 拉斯洛吉丁 我可以看到 Id 属性也已修改,显示相同的新旧值。为什么我的主键在这里被修改?

    我发布了相关代码,

    public class ApplicationUser : IdentityUser {
            [Required, StringLength(50)]
            [Display (Name = "First Name")]
            public string FirstName { get; set; }
            public OffsetDateTime? LastLoggedIn { get; set; }
    }
    

    方法调用实体,因为类继承自 身份用户 我正在使用 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;
    

    属性“id”不能配置为“valuegeneratedonupdate”或 “valuegeneratedonaddorupdate”,因为无法更改键值 将实体添加到存储区后。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jonathan Magnan    7 年前

    密钥属性不能被设计忽略。

    这是因为能够检索到更改后面的行。如果没有密钥,则无法知道已修改了哪个应用程序用户。