Asp.net Ошибка Проверки Подлинности
Я хочу интегрировать IdentityContext с mydbcontext, но я беру эту ошибку
при создании модели была обнаружена одна или несколько ошибок проверки:
Ivdb.Далматинец.Бетон.EFCodeFirst.IdentityUserLogin:: EntityType 'IdentityUserLogin' не имеет определенного ключа. Определите ключ для этого EntityType. Ivdb.Далматинец.Бетон.EFCodeFirst.IdentityUserRole:: EntityType 'IdentityUserRole' не имеет определенного ключа. Определите ключ для этого EntityType. IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' основан на типе 'IdentityUserLogin', который не имеет определенных ключей. IdentityUserRoles: атрибутом entitytype: с помощью entityset 'IdentityUserRoles' основаны на 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
{
}
3 ответа:
ваш код не показывает этого, но из ошибок, которые вы получаете, я предполагаю, что вы переопределяете OnModelCreating.Вот где
IdentityDbContext<ApplicationUser>
настройка сопоставлений Entity 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 }); }
Если вы не хотите вызывать базу.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, вы получаете DbEntityValidationExceptions при использовании логина google по умолчанию.
вынос заключается в том, что вы не можете иметь пустой 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 }