如何在身份服务器中对额外的table进行添加、更新操作?

How to perform addition, update operation on extra table in identity server?

我使用 asnetidentity 在数据库中添加了以下 UserLog table,但我不知道如何在 table.

上执行添加、更新操作
public class User : IdentityUser
{

    public virtual ICollection<UserLog> UserLogs { get; set; }

}
public class Context : IdentityDbContext<User, Role, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
    public Context(string connString)
        : base(connString)
    {
    }
}
public class UserLog
{
    [Key]
    public Guid UserLogID { get; set; }

    public string IPAD { get; set; }
    public DateTime LoginDate { get; set; }
    public string UserId { get; set; }

    [ForeignKey("UserId")]
    public virtual ApplicationUser User { get; set; }
}

public System.Data.Entity.DbSet<UserLog> UserLog { get; set; }

就像下面的代码一样,我正在使用这些 aspnetidentity tables 的内置方法,但是当用户每次登录时如何在 "UserLog" table 中添加一个条目以下方法?

public override async Task AuthenticateLocalAsync(LocalAuthenticationContext ctx)
{
    var username = ctx.UserName;
    var password = ctx.Password;
    var message = ctx.SignInMessage;

    ctx.AuthenticateResult = null;

    if (userManager.SupportsUserPassword)
    {
        var user = await FindUserAsync(username);
        if (user != null)
        {
            if (userManager.SupportsUserLockout &&
                await userManager.IsLockedOutAsync(user.Id))
            {
                return;
            }

            if (await userManager.CheckPasswordAsync(user, password))
            {
                if (userManager.SupportsUserLockout)
                {
                    await userManager.ResetAccessFailedCountAsync(user.Id);
                }

                var result = await PostAuthenticateLocalAsync(user, message);
                if (result == null)
                {
                    var claims = await GetClaimsForAuthenticateResult(user);
                    result = new AuthenticateResult(user.Id.ToString(), await GetDisplayNameForAccountAsync(user.Id), claims);
                }

                ctx.AuthenticateResult = result;
            }
            else if (userManager.SupportsUserLockout)
            {
                await userManager.AccessFailedAsync(user.Id);
            }
        }
    }
}

步骤 1:创建 UserLog 实例

var userLog = new UserLog() { /* Set value for all the properties here */ };

步骤 2:UserLog 的实例添加到 DbContext

context.Set<UserLog>().Add(userLog);

步骤 3:调用 DbContext.SaveChanges() 将更改保存到数据库。

context.SaveChanges();

完整的源代码如下所示:

var userLog = new UserLog {
    UserLogID = Guid.NewGuid(),
    IPAD = "Some Value",
    LoginDate = DateTime.Now,
    UserId = "User Id Here"
};
var context = new Context();
context.Set<UserLogs>().Add(userLog);
context.SaveChanges();