59

I got an error using ASP.NET Identity in my app.

Multiple object sets per type are not supported. The object sets 'Identity Users' and 'Users' can both contain instances of type 'Recommendation Platform.Models.ApplicationUser'.

I saw a few questions about this error in StackOverflow. All indicate on two DbSet objects of the same type. But in my DbContext there aren't the same types of DbSets. Exception is thrown on FindAsync() method during logging in.

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

The problem is I don't have two DbSets of the same type. My Contexts look like this:

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

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

}

and

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

What could cause this problem? Maybe something connected with in-built ASP.NET Identity functionalities? Anyway, what is Users type? I don't have it in my app...

bezbos.
  • 1,551
  • 2
  • 18
  • 33
magos
  • 3,371
  • 4
  • 29
  • 54

5 Answers5

110

You do have two DbSets` of the same type.

IdentityDbContext<T> itself contains Users property declared as:

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

You're declaring second one in your class.

MarcinJuraszek
  • 124,003
  • 15
  • 196
  • 263
  • 11
    Look inside IdentityModel.cs, you will find public class ApplicationDbContext : IdentityDbContext Inside of this context, VS sometimes adds DbSet ApplicationUsers – Vasil Valchev Jul 08 '15 at 10:26
  • @VasilValchev when you inheritance from IdentityUser class it contain Users DbSet – AminM Feb 08 '17 at 07:37
  • I also got the same error, But I never added this line in IdentityModel.cs. How did it magically came there and started throwing error. I am even uploading my changes in git. How come this line came up magically there. Please guide me. P.S: commeting that line fixes the issue – Unbreakable Jul 11 '17 at 02:41
  • How do you solve the problem though? Just deleting the property means it can no longer be accessed. – Martin Vaughan Apr 27 '23 at 12:23
70

review this file "ApplicationDbContext.cs", remove the line, generated automatically by scaffold last, should be like this:

public System.Data.Entity.DbSet<Manager.Models.ApplicationUser> IdentityUsers { get; set; }
Héctor Fuentes
  • 815
  • 6
  • 4
11

This issue can arise from using scaffolding to create a View. You probably did something like this: View > Add > New Scaffold Item... > MVC 5 View > [Model class: ApplicationUser].

Add View Screenshot

The scaffolding wizard added a new line of code in your ApplicationDbContext class.

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

Now you have two DbSet properties of the same type which not only causes an exeptions to be thrown in the FindAsync() method but also when you try to use code-first migrations.

Exception when using code-first migrations

Be very careful when using scaffolding or even better don't use it.

bezbos.
  • 1,551
  • 2
  • 18
  • 33
  • 1
    This is exactly what happened to me! Note: if you generated a controller with scaffolding like this then change "ApplicationUser" to "User" in the controller – SendETHToThisAddress Oct 23 '20 at 06:22
1

Whenever I see this problem, I always double check the DbSet. - ESPECIALLY if you are using another language for Visual Studio.

For us who use other language on VS, always double check because the program doesn´t create controllers or models with the exact name. perhaps this should be a thread.. or there is one already and I missed it.

0

Comment the new generated Dbset from identity model class like below

// public System.Data.Entity.DbSet<SurveyTool.Models.ApplicationUser> ApplicationUsers { get; set; }
BDL
  • 21,052
  • 22
  • 49
  • 55
Wonde_Man
  • 55
  • 6