Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The entity type IdentityUser is not part of the model for the current context

I am seeing the same issue as this question, but the scenario presented there doesnt seem to apply so I think I have a different issue. In fact, I'm seeing several questions on SO that are similar, each with different causes and solutions, so I think this error must be caused from a high level. That said...

I have an EF code-first database model and I'm trying to use IdentityUser to extend a standard registration for my MVC 5 site.

I have my extended UserModel:

namespace MyMvcSite.Models {
    public class UserModel :IdentityUser {
        public string BillingId { get; set; }
        public virtual ICollection<DatabaseModel> Databases { get; set; }
}

And my context:

using MyMvcSite.Models;
namespace MyMvcSite.Web {
    public class AuthContext : IdentityDbContext<UserModel> {
        public AuthContext() : base("AuthContext") {

        }
    }
}

Now, when I execute the code to register a user:

public async Task<IdentityResult> RegisterUser(UserModel user) {
    user.Email = user.UserName;
    var result = await _userManager.CreateAsync(user);

    return result;
}

I get the error: The entity type IdentityUser is not part of the model for the current context. I can't figure out what this error means, because it looks - to me - like I have everything correct. Can anyone tell what might be going wrong???

I know my connectionString AuthContext is correct because I have used it previously.

like image 671
Brett Avatar asked Oct 06 '14 00:10

Brett


2 Answers

When you are using a custom user class with ASP.NET Identity, you have to make sure that you explicitly specify the custom user class type <T> to both the UserManager and the UserStore on instantiation.

private UserManager<UserModel> _userManager;

public AccountController()
{
    AuthContext _ctx = new AuthContext();

    UserStore<UserModel> userStore = new UserStore<UserModel>(_ctx);
    _userManager = new UserManager<UserModel>(userStore);     
}

or in shorter form (like your reply comment):

private UserManager<UserModel> _userManager;

public AccountController()
{
    AuthContext _ctx = new AuthContext();    
    _userManager = new UserManager<UserModel>(new UserStore<UserModel>(_ctx));     
}

If the type is allowed to defaulted to IdentityUser when you want to use a custom class you will experience the error you reported.

like image 123
David Tansey Avatar answered Sep 18 '22 08:09

David Tansey


I was having this same problem, and I recall having a similar problem working with SimpleMembership in MVC4.

I’m doing database first development, so I have an EDMX file. Turns out, ASP.NET Identity does not like the connection string that is created when you generate your .edmx model file. If you are using a. EDM connection string in :base(“EDMConnString”) you will most likely have this problem.

I fixed this by creating a standard connection string that pointed to the database where the ASP.NET Identity tables are (in my case the same database), used that connection string in :base, and it worked.

Something like this

<add name="IdentityConnection" connectionString="data source=THEJUS\SQLSERVER2014;initial catalog=IdentitySample;integrated security=True;MultipleActiveResultSets=True;App=IdentitySample.Admin" providerName="System.Data.SqlClient" />
like image 45
thejustv Avatar answered Sep 19 '22 08:09

thejustv