Asp.net身份validation错误

我想整合IdentityContext与mydbcontext,但我正在采取这个错误

在模型生成期间检测到一个或多个validation错误:

Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键。 定义这个EntityType的关键。 Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole :: EntityType“IdentityUserRole”没有定义键。 定义这个EntityType的关键。 IdentityUserLogins:EntityType:EntitySet“IdentityUserLogins”基于没有定义密钥的“IdentityUserLogin”types。 IdentityUserRoles:EntityType:EntitySet“IdentityUserRoles”基于没有定义键的types“IdentityUserRole”。

我如何解决这个问题?

码:

public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser> { static ivdbDb156978Context() { Database.SetInitializer<ivdbDb156978Context>(null); } public ivdbDb156978Context() : base("Name=ivdbContext") { } public DbSet<Car> Cars { get; set; } 

应用程序用户

  public class ApplicationUser : IdentityUser { } 

你的代码不会显示这个,但是从你得到的错误我假设你重写OnModelCreating。这是IdentityDbContext<ApplicationUser>configurationentity framework映射的地方。 这意味着如果你想重写OnModelCreating,你需要调用基础,或者你必须自己做映射。

所以要么这个:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // your stuff here } 

或者你做映射:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId); modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id); modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); } 

如果你不想调用base.OnModelCreating,并想要做你自己的映射,你的映射应该是这样的:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).Property(p => p.Name).IsRequired(); modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); modelBuilder.Entity<IdentityUserLogin>().HasKey(u => new {u.UserId, u.LoginProvider, u.ProviderKey}); } 

如果您仅将IdentityUserLogin的密钥放在UserId上,则在使用默认的Googlelogin时会得到DbEntityValidationExceptions。

拿走是你不能有一个空的OnModelCreating

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // your stuff here } 

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { // base.OnModelCreating(modelBuilder); // your stuff here }