我正在按照article从Identity 1.0.0迁移到Identity 2.0.1
并且生成的迁移代码与新的IdentityUser无关。它不会添加新列。
因此,我创建了一个新项目,然后再次尝试,但是迁移代码为空。
为了解决该问题,我直接在SQL Server中进行了编辑,然后在解决方案中再次导入了数据库。
现在您可以看到,我的AspNetUser
与我的IdentityUser
完全相同
IdentityUser
public virtual int AccessFailedCount { get; set; }
public virtual ICollection<TClaim> Claims { get; }
public virtual string Email { get; set; }
public virtual bool EmailConfirmed { get; set; }
public virtual TKey Id { get; set; }
public virtual bool LockoutEnabled { get; set; }
public virtual DateTime? LockoutEndDateUtc { get; set; }
public virtual ICollection<TLogin> Logins { get; }
public virtual string PasswordHash { get; set; }
public virtual string PhoneNumber { get; set; }
public virtual bool PhoneNumberConfirmed { get; set; }
public virtual ICollection<TRole> Roles { get; }
public virtual string SecurityStamp { get; set; }
public virtual bool TwoFactorEnabled { get; set; }
public virtual string UserName { get; set; }
IdentityUser.cs
public class ApplicationUser : IdentityUser
{
public bool Has_accepted_policy { get; set; }
public int user_type_id { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
AspNetUser
public string Id { get; set; }
[Required]
[StringLength(256)]
public string UserName { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
[StringLength(256)]
public string Email { get; set; }
public bool EmailConfirmed { get; set; }
public bool Is_Active { get; set; }
[Required]
[StringLength(128)]
public string Discriminator { get; set; }
public int? user_type_id { get; set; }
public bool Has_accepted_policy { get; set; }
public string PhoneNumber { get; set; }
public bool PhoneNumberConfirmed { get; set; }
public bool TwoFactorEnabled { get; set; }
public DateTime? LockoutEndDateUtc { get; set; }
public bool LockoutEnabled { get; set; }
public int AccessFailedCount { get; set; }
... other virtual properties
当我尝试注册用户时,出现以下异常
在这条线
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
我的启动。Auth.cs
UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());
在我的 AccountController 中,我这样声明自己的
UserManager
public AccountController()
: this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
{
}
public AccountController(UserManager<ApplicationUser> userManager,
ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
UserManager = userManager;
AccessTokenFormat = accessTokenFormat;
}
public UserManager<ApplicationUser> UserManager { get; private set; }
除了
AspNetUser
类中的新属性外,我没有进行任何其他更改,并且它在迁移之前可以很好地工作。CodePlex上有一个类似的问题,标记为已修复,但没有给出解决方案
有谁知道如何解决这一问题?
编辑
确保我在编辑SQL数据库时没有犯任何错误。我创建了另一个项目并生成了一个身份数据库,并且更改了该数据库的连接字符串,但仍然遇到相同的错误。
解决方案
当我编辑数据库时,我没有注意到在Identity 2.0.0中他们更改了
User_Id
表中UserId
的AspUserClaims
。完成此操作后,我遇到了同样的错误,但随后我做了tschmit007所说的关于将ApplicationDbContext
添加到UserStore
构造函数的操作,现在它可以工作了。UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
最佳答案
对我来说,似乎错过了上下文说明:
UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());
应该
UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));