web-dev-qa-db-fra.com

Identité ASP.NET - Plusieurs ensembles d'objets par type ne sont pas pris en charge.

Une erreur s'est produite lors de l'utilisation de l'identité ASP.NET dans mon application.

Plusieurs ensembles d'objets par type ne sont pas pris en charge. Les ensembles d'objets "Utilisateurs d'identité" et "Utilisateurs" peuvent tous deux contenir des instances de type "Recommandation Platform.Models.ApplicationUser".

J'ai vu quelques questions sur cette erreur dans StackOverflow. Tous indiquent sur deux objets DbSet du même type. Mais dans mon DbContext, il n'y a pas les mêmes types de DbSets. Une exception est levée sur la méthode FindAsync() lors de la connexion.

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

Le problème est que je n'ai pas deux DbSets du même type. Mes contextes ressemblent à ceci:

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

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

}

et

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

Qu'est-ce qui pourrait causer ce problème? Peut-être que quelque chose est lié aux fonctionnalités d’identité ASP.NET intégrées? Quoi qu'il en soit, quel est le type Users? Je ne l'ai pas dans mon application ...

49
magos

Vous avez deux DbSets` du même type.

IdentityDbContext<T> lui-même contient la propriété Users déclarée comme:

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

Vous déclarez deuxième dans votre classe.

99
MarcinJuraszek

examinez ce fichier "ApplicationDbContext.cs", supprimez la ligne, générée automatiquement par scaffold en dernier, devrait ressembler à ceci:

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

Ce problème peut provenir de l'utilisation d'un échafaudage pour créer un View. Vous avez probablement fait quelque chose comme ceci: Voir> Ajouter> Nouvel élément d'échafaudage ...> Vue MVC 5> [Classe de modèle: ApplicationUser] .

Add View Screenshot

L'assistant d'échafaudage a ajouté une nouvelle ligne de code dans votre classe ApplicationDbContext.

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

Vous disposez maintenant de deux propriétés DbSet du même type, qui provoquent non seulement la levée d'une exception dans la méthode FindAsync(), mais également lorsque vous essayez d'utiliser les migrations code-first.

Exception when using code-first migrations

Soyez très prudent lorsque vous utilisez un échafaudage ou mieux ne l'utilisez pas.

5
Boško Bezik