Entity framework 从未包含在代码优先迁移中的标识对象继承的类

Entity framework 从未包含在代码优先迁移中的标识对象继承的类,entity-framework,entity-framework-6,asp.net-identity,entity-framework-migrations,asp.net-identity-2,Entity Framework,Entity Framework 6,Asp.net Identity,Entity Framework Migrations,Asp.net Identity 2,为了完全自定义ASP.NET Identity framework,我从所有六个Identity类继承了类: public class VigilUserRole : IdentityUserRole<Guid> public class VigilUserLogin : IdentityUserLogin<Guid> public class VigilUserClaim : IdentityUserClaim<Guid> public class Vigi

为了完全自定义ASP.NET Identity framework,我从所有六个Identity类继承了类:

public class VigilUserRole : IdentityUserRole<Guid>
public class VigilUserLogin : IdentityUserLogin<Guid>
public class VigilUserClaim : IdentityUserClaim<Guid>
public class VigilUser : IdentityUser<Guid, VigilUserLogin, VigilUserRole, VigilUserClaim>
public class VigilRole : IdentityRole<Guid, VigilUserRole>
public class VigilDataContext : IdentityDbContext<VigilUser, VigilRole, Guid, VigilUserLogin, VigilUserRole, VigilUserClaim>
我甚至尝试重写
OnModelCreating
方法,显式忽略
Identity
表并注册
Vigil

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        modelBuilder.Ignore(new Type[] { typeof(IdentityUser), typeof(IdentityRole), typeof(IdentityUserClaim), typeof(IdentityUserRole), typeof(IdentityUserLogin) });
        modelBuilder.RegisterEntityType(typeof(VigilUser));
        modelBuilder.RegisterEntityType(typeof(VigilUserRole));
        modelBuilder.RegisterEntityType(typeof(VigilUserClaim));
        modelBuilder.RegisterEntityType(typeof(VigilUserLogin));
        modelBuilder.RegisterEntityType(typeof(VigilRole));

        base.OnModelCreating(modelBuilder);
    }
迁移中未识别
Vigil
类,但包含
Identity
类(映射到
AspNet
表),我缺少什么?我甚至尝试过用
int
替换
TKey
类型,但得到了相同的结果


还可以从下载解决方案,其中包括解决问题的各种失败尝试的历史记录。

您的ApplicationDbContext继承自IdentityDbContext。 在应用程序的OnModelCreating方法中,Bcontext最后一行(base.OnModelCreating(modelBuilder)) 调用基类(源)的OnModelCreating方法,该方法包含

modelBuilder.Entity<TUser>().ToTable("AspNetUsers");
modelBuilder.Entity<TUserRole>().HasKey(r => new { r.UserId, r.RoleId })
            .ToTable("AspNetUserRoles");
modelBuilder.Entity<TUserLogin>()
            .HasKey(l => new { l.LoginProvider, l.ProviderKey, l.UserId })
            .ToTable("AspNetUserLogins");
modelBuilder.Entity<TUserClaim>()
            .ToTable("AspNetUserClaims");
modelBuilder.Entity<TRole>()
            .ToTable("AspNetRoles");
modelBuilder.Entity().ToTable(“AspNetUsers”);
modelBuilder.Entity().HasKey(r=>new{r.UserId,r.RoleId})
.ToTable(“AspNetUserRoles”);
modelBuilder.Entity()
.HasKey(l=>new{l.LoginProvider,l.ProviderKey,l.UserId})
.ToTable(“AspNetUserLogins”);
modelBuilder.Entity()
.ToTable(“AspNetUserClaims”);
modelBuilder.Entity()
.ToTable(“AspNetRoles”);
所以不管你在上面做了什么,你都会覆盖它

尝试将此行移到自定义代码之前的顶部

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {                       
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<VigilUser>().ToTable("VigilUser");    
            modelBuilder.Entity<VigilRole>().ToTable("VigilRole");
            modelBuilder.Entity<VigilUserRole>().ToTable("VigilUserRole");
            modelBuilder.Entity<VigilUserClaim>().ToTable("VigilUserClaim");
            modelBuilder.Entity<VigilUserLogin>().ToTable("VigilUserLogin");
        }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{                       
基于模型创建(modelBuilder);
modelBuilder.Entity().ToTable(“VigilUser”);
modelBuilder.Entity().ToTable(“VigilRole”);
modelBuilder.Entity().ToTable(“VigilUserRole”);
modelBuilder.Entity().ToTable(“VigilUserClaim”);
modelBuilder.Entity().ToTable(“VigilUserLogin”);
}

IdentityDbContext是如何明确设置表名的?你的答案是正确的,解决了我的问题,但如果有一个方法,我可能会发现这个信息以外的询问,所以很高兴知道。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {                       
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<VigilUser>().ToTable("VigilUser");    
            modelBuilder.Entity<VigilRole>().ToTable("VigilRole");
            modelBuilder.Entity<VigilUserRole>().ToTable("VigilUserRole");
            modelBuilder.Entity<VigilUserClaim>().ToTable("VigilUserClaim");
            modelBuilder.Entity<VigilUserLogin>().ToTable("VigilUserLogin");
        }