模型生成过程中检测到一个或多个验证错误:
Demo1.Models.IdentityUserRole: : EntityType“IdentityUserRole”未定义键。请为该 EntityType 定义键。
Demo1.Models.IdentityUserLogin: : EntityType“IdentityUserLogin”未定义键。请为该 EntityType 定义键。
IdentityUserRoles: EntityType: EntitySet“IdentityUserRoles”基于未定义任何键的类型“IdentityUserRole”。
IdentityUserLogins: EntityType: EntitySet“IdentityUserLogins”基于未定义任何键的类型“IdentityUserLogin”
使用微软自带的identity系统中,由于表的原因需要重写
protected override void OnModelCreating(DbModelBuilder modelBuilder)
但是出现了上面的错误,研究源码发现IdentityDbContext类也重写了Onmodelcreating()方法
于是在自己的重写中加了源码原有的重写方法
if (modelBuilder == null)
{
throw new ArgumentNullException("modelBuilder");
}
// Needed to ensure subclasses share the same table
var user = modelBuilder.Entity<ApplicationUser>()
.ToTable("AspNetUsers");
user.HasMany(u => u.Roles).WithRequired().HasForeignKey(ur => ur.UserId);
user.HasMany(u => u.Claims).WithRequired().HasForeignKey(uc => uc.UserId);
user.HasMany(u => u.Logins).WithRequired().HasForeignKey(ul => ul.UserId);
user.Property(u => u.UserName)
.IsRequired()
.HasMaxLength(256)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("UserNameIndex") { IsUnique = true }));
// CONSIDER: u.Email is Required if set on options?
user.Property(u => u.Email).HasMaxLength(256);
modelBuilder.Entity<IdentityUserRole>()
.HasKey(r => new { r.UserId, r.RoleId })
.ToTable("AspNetUserRoles");
modelBuilder.Entity<IdentityUserLogin>()
.HasKey(l => new { l.LoginProvider, l.ProviderKey, l.UserId })
.ToTable("AspNetUserLogins");
modelBuilder.Entity<IdentityUserClaim>()
.ToTable("AspNetUserClaims");
var role = modelBuilder.Entity<IdentityRole>()
.ToTable("AspNetRoles");
role.Property(r => r.Name)
.IsRequired()
.HasMaxLength(256)
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("RoleNameIndex") { IsUnique = true }));
role.HasMany(r => r.Users).WithRequired().HasForeignKey(ur => ur.RoleId);
这样可以避免上面的错误