Entity framework 从未包含在代码优先迁移中的标识对象继承的类
为了完全自定义ASP.NET Identity framework,我从所有六个Identity类继承了类: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
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");
}