13

MVC5 uygulamasına profil/Üyelik bilgileri eklemeye ve yapılandırma eşlemeleri eklemeye çalışıyorum.Asp.net MVC5 EF6 akıcı api kullanarak harita tabloları?

aşağıdaki hata iletisi alıyorum:

my.Models.IdentityUserLogin: EntityType 'IdentityUserLogin' tanımlı hiçbir anahtarı vardır. Bu EntityType'ın anahtarını tanımlayın.

my.Models.IdentityUserRole:: EntityType 'IdentityUserRole', tanımlanmış anahtar içermez. Bu EntityType'ın anahtarını tanımlayın.

IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins', tanımlanan kimliği olmayan 'IdentityUserLogin' türüne bağlı olarak 'dur.

IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles', tanımlanmamış anahtarların bulunduğu 'IdentityUserRole' türünde tabanlıdır.

public class ApplicationUser : IdentityUser 
{ 
    public string City { get; set; } 
    public string Discriminator { get; set; } 

    public string Address { get; set; }  
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new ApplicationUserConfiguration());   
    } 
} 

cevap

18

Çağrı base.OnModelCreating(modelBuilder) sonra yapılandırma ekledi.

+2

bu doesnt work..try çağırarak eğer yapılandırmadan önce –

+1

'base.OnModelCreating (modelBuilder)', 'IdentityDbContext ' kullanıldığında çağrılmalı, 'OnModelCreating' geçersiz kılınmış ve ben IdentityUs'u el ile yapılandırmadım. öznitelikleri veya akıcı API ile erLogin', IdentityUserRole ve IdentityUserClaim'. –

22

base.OnModelCreating(modelBuilder) çağrısı, sorunu benim için çözmedi.

Microsoft.AspNet.Identity.EntityFramework davranışı VS2013-Preview, VS2013-RC ve VS2013-RTM'de farklı görünüyor. RTM sürümünü kullanıyorum. Ben AspNet.Identity.EntityFramework üzerinde çalışmalar devam etmektedir tahmin

public class ApplicationUser : IdentityUser 
{ 
    public string DisplayName { get; set; } 
} 


public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() : base("DefaultConnection") { } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(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 }); 
    } 

(Configuring/Mapping Properties and Types with the Fluent API bakınız):

IdentityUser devralmasını sonra çalışması için modeldeki diğer tüm birincil anahtarlar yeniden zorunda ve bu giderilecektir

+0

Bu sorunun üstesinden gelmek için tam olarak aynı şeyi yapmak zorunda kaldım. EF'in kimlik kimliklerini otomatik olarak seçeceğini düşündüm. –

+2

Bu benim için hepsini çözdü!Çok teşekkürler - yanıt olarak işaretlenmiş olmalı :) – Darren

+0

Benzer bir sorunla karşılaştım ve bu çözümü denedim ve sorunu çözdüğünü düşündüm ama ben IdentityUsers gibi veritabanında birkaç ek tablo alıyorum ve ayrıca AspNetUsers tablosuna da sahibim. Neyi yanlış yaptım? – lawphotog

0

alarak etkisinin farkında olmak her birinden sonra OnModelCreating yöntem ve testin etrafında adımları izleyin (?):

  1. Kural çakışmaları önlemek için bir tane Context olduğundan emin olun.
  2. (her şeyden önce) söz yöntemi içinde
  3. Çağrı base.OnModelCreating(modelBuilder); yöntemde şunları artı önizleme adımı ekleyin:


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