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

本文关键字:设置 NULL ID AspNetUserRoles 表的 IdentityUser 为什么 | 更新日期: 2023-09-27 17:50:48

我有一个基于实体框架6.1.0,ASP的解决方案。. NET Identity Core 2.0.0;. NET Identity EntityFramework 2.0.0;NET身份owin2.0.0。

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

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

有人在升级这些软件包时遇到类似的问题吗?你是如何解决这个问题的?

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

不能确切地解释为什么它工作,但我在代码中做了这些更改来克服这个问题:

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迁移从标识表中删除了额外的列。