为什么AspNetUserRoles表的IdentityUser_ID列设置为NULL

时间:2015-05-26 12:46:16

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

我有一个基于Entity Framework 6.1.0,ASP.NET Identity Core 2.0.0,ASP.NET Identity EntityFramework 2.0.0,ASP.NET Identity OWIN 2.0.0的解决方案。

使用NuGet升级到最新版本的软件包(EF 6.1.3,Identity packages rel.2.2.1)时,我遇到了IdentityUser_ID表的AspNetUserRoles列正在出现的问题在更改用户帐户时设置为NULL。

我见过很少有人提到同样的问题,但没有一个链接到它的解决方案。首先,我不明白为什么首先应该有IdentityUser_Id列,因为它最初包含与UserId列相同的值。

在升级这些软件包时,有没有人遇到过类似的问题?解决问题的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

无法确切解释其工作原理,但我在代码中进行了这些更改以克服此问题:

public class MyContext : IdentityDbContext<ApplicationUser>
{
    public MyContext() : base("MyConnection")
    {

    }


    static MyContext()
    {
        Database.SetInitializer<MyContext>(new ApplicationDbInitializer());
    }

    public static MyContext Create()
    {
        return new MyContext();
    }

...和我的OnModelCreating ......

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers");

//modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).ToTable("AspNetRoles");
//modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers");
//modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { l.UserId, l.LoginProvider, l.ProviderKey }).ToTable("AspNetUserLogins");
//modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }).ToTable("AspNetUserRoles");
//modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");
}

因此,通常会注释掉所有内容并从IdentityUser更改为ApplicationUser。完成这些更改后,db迁移会从标识表中删除多余的列。