This is MVC 5/ EF6. So I have the following classes:
public class User : IdentityUser
{
public User()
{
Levels = new List();
If you're using UserManager the way 'it came out of the box' then it's probably instantiated like this:
public AccountController()
: this(new UserManager(new UserStore(new MyDbContext())))
{
}
public AccountController(UserManager userManager)
{
UserManager = userManager;
}
public UserManager UserManager { get; private set; }
It means that if you don't provide a UserManager instance to the AccountController constructor (and it's probably the case here), a new MyDbContext is created for the UserManager store.
Yet, you have another instance of MyDbContext, as i can infer from this line in your code:
Level level = DBContext.Levels.Where(s => s.Name == model.Level.Name).SingleOrDefault();
All it means is that you have to make your UserManager use the same context:
public AccountController() : this(null)
{
}
public AccountController(UserManager userManager = null)
{
DBContext = new MyDBContext();
if (userManager == null)
userManager = new UserManager(new UserStore(DBContext));
UserManager = userManager;
}
public UserManager UserManager { get; private set; }
public MyDBContext DBContext;
This way, you're creating the (only) MyDbContext instance first, then passing it to the UserManager constructor (as the IUserStore).
Also, you can definitely make a good use of Dependency Injection here and have the MyDbContext instance injected for you by a DI container and keeping your current code almost unchanged:
public AccountController(MyDBContext context)
: this(new UserManager(new UserStore(context)))
{
this.DBContext = context;
}
See Tutorial (for Microsoft Unity).