2014-06-21 11 views
38

Otrzymałem błąd z wykorzystaniem tożsamości ASP.NET w mojej aplikacji.Identyfikator ASP.NET - wiele zestawów obiektów na typ nie jest obsługiwanych

Wiele zestawów obiektów na typ nie jest obsługiwanych. Zestawy obiektów "Użytkownicy tożsamości" i "Użytkownicy" mogą zawierać instancje typu "Zalecenie Platform.Models.ApplicationUser".

Widziałem kilka pytań na temat tego błędu w stackoverflow. Wszystkie wskazują na dwa obiekty DbSet tego samego typu. Ale w moim DbContext nie ma tych samych typów DbSets. Wyjątkiem w rzucony na FindAsync metoda(), podczas zalogowaniu.

if (ModelState.IsValid) 
    var user = await UserManager.FindAsync(model.UserName, model.Password); 
    if (user != null && user.IsConfirmed) 
    { 

Problemem jest to, że nie ma dwóch DbSets tego samego typu. Moi Konteksty wyglądać tak:

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

    public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; } 

} 

i

public class RecContext : DbContext 
{ 
    public RecContext() 
     : base("RecConnection") 
    { 
     Database.SetInitializer<RecContext>(new DropCreateDatabaseIfModelChanges<RecContext>()); 
    } 

    public DbSet<Recommendation> Recommendations { get; set; } 
    public DbSet<Geolocation> Geolocations { get; set; } 
    public DbSet<Faq> Faqs { get; set; } 
    public DbSet<IndexText> IndexTexts { get; set; } 
} 

Co może być przyczyną tego problemu? Może coś związanego z wbudowanymi funkcjonalnościami ASP.NET Identity? W każdym razie, jaki jest typ użytkownika? Nie mam go w mojej aplikacji ...

Odpowiedz

81

Masz dwa DbSet s tego samego typu.

sama IdentityDbContext<T> zawiera Users nieruchomość zadeklarowane jako:

public DbSet<T> Users { get; set; } 

Ty deklarując drugi w swojej klasie.

+0

Dziękuję Marcin. :) Przy okazji - bardzo fajny blog. Pozdrawia. – magos

+0

gdzie to jest ??? –

+9

zajrzeć IdentityModel.cs znajdziesz publicznej klasy ApplicationDbContext: IdentityDbContext Wewnątrz tym kontekście VS czasami dodaje DbSet ApplicationUsers –

57

ten plik „ApplicationDbContext.cs”, usunąć wiersz, generowany automatycznie przez rusztowania ostatni powinien być tak:

public System.Data.Entity.DbSet<Manager.Models.ApplicationUser> IdentityUsers { get; set; } 
+1

Dzięki ... to mi się stało – lawphotog

+3

Ja też. F ..... F ...... S. –

+0

Dziękuję, teraz wiem, że winowajcą jest rusztowanie, które zrobił teraz nowy kreator kontrolera. – VivekDev

Powiązane problemy