Marc Marc - 3 months ago 23
ASP.NET (C#) Question

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

I'm migrating from Identity 1.0.0 to Identity 2.0.1 following this article

and the migrations code generated is nothing about the new IdentityUser. It doesn't add the new columns.

So I made a new project and tried again but the migrations codes is empty.

To fix that problem, I did the edits directly in SQL Server and imported my database again in my solution.

Now my

AspNetUser
is exactly the same as my
IdentityUser
as you can see

IdentityUser

public virtual int AccessFailedCount { get; set; }

public virtual ICollection<TClaim> Claims { get; }

public virtual string Email { get; set; }

public virtual bool EmailConfirmed { get; set; }

public virtual TKey Id { get; set; }

public virtual bool LockoutEnabled { get; set; }

public virtual DateTime? LockoutEndDateUtc { get; set; }

public virtual ICollection<TLogin> Logins { get; }

public virtual string PasswordHash { get; set; }

public virtual string PhoneNumber { get; set; }

public virtual bool PhoneNumberConfirmed { get; set; }

public virtual ICollection<TRole> Roles { get; }

public virtual string SecurityStamp { get; set; }

public virtual bool TwoFactorEnabled { get; set; }

public virtual string UserName { get; set; }


IdentityUser.cs

public class ApplicationUser : IdentityUser
{
public bool Has_accepted_policy { get; set; }
public int user_type_id { get; set; }
}

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

}
}


AspNetUser

public string Id { get; set; }

[Required]
[StringLength(256)]
public string UserName { get; set; }

public string PasswordHash { get; set; }

public string SecurityStamp { get; set; }

[StringLength(256)]
public string Email { get; set; }

public bool EmailConfirmed { get; set; }

public bool Is_Active { get; set; }

[Required]
[StringLength(128)]
public string Discriminator { get; set; }

public int? user_type_id { get; set; }

public bool Has_accepted_policy { get; set; }

public string PhoneNumber { get; set; }

public bool PhoneNumberConfirmed { get; set; }

public bool TwoFactorEnabled { get; set; }

public DateTime? LockoutEndDateUtc { get; set; }

public bool LockoutEnabled { get; set; }

public int AccessFailedCount { get; set; }

... other virtual properties


and when I try to register a user I have the following exception


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


at this line

IdentityResult result = await UserManager.CreateAsync(user, model.Password);


My startup.Auth.cs

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());


And in my AccountController I declare my
UserManager
like this

public AccountController()
: this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
{
}

public AccountController(UserManager<ApplicationUser> userManager,
ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
UserManager = userManager;
AccessTokenFormat = accessTokenFormat;
}

public UserManager<ApplicationUser> UserManager { get; private set; }


I haven't changed anything except the new properties in the
AspNetUser
class and it used to work well before the migration.

There's a similar issue on CodePlex marked as fixed but they don't give the solution

Does anyone know how to fix this?

EDIT

To be sure I didn't do any mistakes when I edited my SQL database. I created another project and generated an Identity database and I changed the connection string for that database and I still have the same error.

SOLUTION

When I have edited my database I haven't noticed that in Identity 2.0.0 they changed the
User_Id
for
UserId
in
AspUserClaims
table. After doing that I had the same error but then I did what tschmit007 said about adding the
ApplicationDbContext
to the
UserStore
constructor and now it works.

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

Answer

for me it seems to miss a context instanciation:

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());

should be

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));