我已经实现了自定义UserStore和IdentityUser。我已经更改了代码,因此它使用int作为键类型。
问题是我将密钥生成留给了数据库自动增量字段。现在,在Register上,用户被保存到db但是框架没有Id(它的int默认为0),因为它没有读取db的任何返回值。 (db确实创建了新的id autoincrement并保存了它,但框架没有它)
我做错了吗?
问题:
我们是否真的想要进行额外的往返db(例如,通过用户名查找)来获取ID?
我们是否应该在注册时创建一条虚拟记录以获取Id,然后使用真实数据更新它?
所有这一切都很脏。
有没有人解决过这个问题?
更新:添加一些代码
我的IdentityUser:
public class IdentityUser : IUser<int>
{
public int Id { get; set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public bool IsEmailConfirmed { get; set; }
public bool IsPhoneNumberConfirmed { get; set; }
public int AccessFailedCount { get; set; }
public bool LockoutEnabled { get; set; }
public DateTime? LockoutEndDate { get; set; }
public bool TwoFactorAuthEnabled { get; set; }
public IdentityUser()
{
//this.Claims = new List<Claim>();
//this.Logins = new List<UserLoginInfo>();
}
public IdentityUser(int userId, string userName)
: this()
{
this.Id = userId;
this.UserName = userName;
}
}
我的UserStore,CreateNew方法:
public Task CreateAsync(TUser user)
{
if (user == null)
{
throw new ArgumentNullException("user", "User must not be null.");
}
_userDB.Insert(user);
return Task.FromResult(0);
}
所以,更多的描述:
1)用户点击注册
2)通过注册表单
获取提示3)提交电子邮件,密码,确认密码
4)记录在DB中创建
5)现在问题来自于账户/注册:
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
SignInAsync中的用户参数没有Id(它的int默认值为0),因为很明显,它没有返回SQL db通过auto分配给它的ID值。增量。