2013-11-15 44 views
57

Ben mydbcontext ile IdentityContext entegre istiyorum amaAsp.net Kimlik Doğrulama Hatası

Bir veya daha fazla doğrulama hataları modeli oluşturma sırasında saptanan bu hatayı alıyorum:

Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLogin: : EntityType 'IdentityUserLogin' anahtar tanımlanmamış. Bu EntityType'ın anahtarını tanımlayın. Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole:: EntityType 'IdentityUserRole' anahtar tanımlanmamış. Bu EntityType'ın anahtarını tanımlayın. IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins', tanımlanan anahtarları olmayan 'IdentityUserLogin' türünü temel alır. IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles', tanımlanan anahtarları olmayan 'IdentityUserRole' türüne dayanır.

Bunu nasıl çözebilirim?

Kodu:

public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser> 
{ 
    static ivdbDb156978Context() 
    { 
     Database.SetInitializer<ivdbDb156978Context>(null); 
    } 

    public ivdbDb156978Context() 
     : base("Name=ivdbContext") 
    { 
    } 


    public DbSet<Car> Cars { get; set; } 

Uygulama Kullanıcı

public class ApplicationUser : IdentityUser 
{ 

} 

cevap

152

Kodunuz Bunu göstermek does't, ancak hatalardan Seni OnModelCreating.This nerede IdentityDbContext<ApplicationUser> yapılandırmak olduğunu geçersiz kılma varsayılmaktadır alıyorsanız varlık çerçeve eşlemeleri. Bu, OnModelCreating'i geçersiz kılmak isterseniz, ya tabanı çağırmanız gerektiğini veya haritayı kendiniz yapmanız gerektiğini ifade eder.

Yani ya bu:

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

    // your stuff here 
} 

Yoksa eşlemesi yapın: Eğer base.OnModelCreating aramak ve kendi eşleştirme yapmak istiyorum istemiyorsanız, lütfen haritalama gerektiği

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 }); 
} 
+0

Ben EF ilgili doğru yanıt bulabilirsiniz eminim Kod Ihtiyacım olduğunda StackOverFlow'da ilk yaklaşım. teşekkürler –

+0

OnModelCreating üzerinde bir override yarattım, bu yüzden modelBuilder.Conventions.Remove (); EF, tablo isimleri çoğaltmaktan kaçınmak için bir göç eklemeyi ilk denemede. Çok yararlı bir cevabınız için teşekkürler Olav – GDB

+0

Merhaba Olav, Bu benim anahtar tanımlı bir hatayı çözdü ancak şimdi çok sayıda Geçersiz sütun adı hatası alıyorum. Http://stackoverflow.com/questions/23346422/identity-2-usermanager-find-throws-invalid-object-name-dbo-applicationuser-e adresini buraya gönderdim. Bunun hakkında bir fikrin var mı? Teşekkür ederim, Joe – Joe

6

şuna benzer: yalnızca KullanıcıNo üzerinde IdentityUserLogin anahtarı koyarsanız

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}); 
} 

, sen DbEntityVa olsun default google girişini kullanırken lidationExceptions.

3

götürmek sen

İyi boş OnModelCreating olamaz olmasıdır

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

Kötü

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