如何在身份服务器的额外表上执行添加,更新操作?

时间:2016-11-08 06:26:37

标签: c# asp.net-identity-2

我使用asnetidentity在数据库中添加了以下UserLog表,但我不知道如何在表上执行添加,更新操作。

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表的内置方法,但是当用户每次使用以下方法登录时,如何在“UserLog”表中添加条目?

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 个答案:

答案 0 :(得分:0)

第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();
相关问题