it-swarm.com.de

ASP.NET-Identität - Mehrere Objektgruppen pro Typ werden nicht unterstützt

Bei der Verwendung von ASP.NET Identity in meiner App ist ein Fehler aufgetreten.

Mehrere Objektgruppen pro Typ werden nicht unterstützt. Die Objektgruppen 'Identity Users' und 'Users' können Instanzen des Typs 'Recommendation Platform.Models.ApplicationUser' enthalten.

Ich habe einige Fragen zu diesem Fehler in StackOverflow gesehen. Alle zeigen auf zwei DbSet Objekten des gleichen Typs. Aber in meinem DbContext gibt es nicht die gleichen Arten von DbSets. Bei der Anmeldung wird eine Ausnahme für die Methode FindAsync() ausgelöst.

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

Das Problem ist, dass ich nicht zwei DbSets des gleichen Typs habe. Meine Kontexte sehen so aus:

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

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

}

und

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

Was könnte dieses Problem verursachen? Vielleicht hängt etwas mit den integrierten Funktionen von ASP.NET Identity zusammen? Was ist der Typ Users? Ich habe es nicht in meiner App ...

49
magos

Sie haben zwei DbSets` desselben Typs.

IdentityDbContext<T> selbst enthält die Eigenschaft Users deklariert als:

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

Sie erklären den zweiten in Ihrer Klasse.

99
MarcinJuraszek

überprüfen Sie diese Datei "ApplicationDbContext.cs", entfernen Sie die Zeile, die automatisch vom Gerüst zuletzt generiert wird, sollte folgendermaßen aussehen:

public System.Data.Entity.DbSet<Manager.Models.ApplicationUser> IdentityUsers { get; set; }
69
Héctor Fuentes

Dieses Problem kann durch die Verwendung von Gerüsten zum Erstellen eines View auftreten. Sie haben wahrscheinlich Folgendes getan: Ansicht> Hinzufügen> Neues Gerüstelement ...> MVC 5-Ansicht> [Modellklasse: ApplicationUser] .

Add View Screenshot

Der Gerüst-Assistent hat eine neue Codezeile in Ihrer Klasse ApplicationDbContext hinzugefügt.

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

Jetzt haben Sie zwei DbSet -Eigenschaften desselben Typs, die nicht nur dazu führen, dass in der FindAsync() -Methode Ausnahmen ausgelöst werden, sondern auch, wenn Sie versuchen, Code-First-Migrationen zu verwenden.

Exception when using code-first migrations

Seien Sie sehr vorsichtig, wenn Sie ein Gerüst verwenden, oder verwenden Sie es besser nicht.

5
Boško Bezik