使用int作为TKey的asp标识 - 找不到UserId异常

时间:2016-11-13 00:21:19

标签: asp.net-mvc asp.net-identity asp.net-identity-2

我已经实现了自定义UserStore和IdentityUser。我已经更改了代码,因此它使用int作为键类型。

问题是我将密钥生成留给了数据库自动增量字段。现在,在Register上,用户被保存到db但是框架没有Id(它的int默认为0),因为它没有读取db的任何返回值。 (db确实创建了新的id autoincrement并保存了它,但框架没有它)

我做错了吗?

问题:

  1. 我们是否真的想要进行额外的往返db(例如,通过用户名查找)来获取ID?

  2. 我们是否应该在注册时创建一条虚拟记录以获取Id,然后使用真实数据更新它?

  3. 所有这一切都很脏。

    有没有人解决过这个问题?

    更新:添加一些代码

    我的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值。增量。

0 个答案:

没有答案