MVC 5 UserManager:实体类型ApplicationUser不是当前上下文的模型的一部分

我正在尝试(但没有)将MVC UserManager实现到我的网站。 我认为我的案子相当微不足道。 我有一个User类(entity framework – 数据库优先),其中包含所有用户的信息。 并非用户中的每个用户都可以访问该网站。 所以在我的ApplicationUser中有一个指向这个类的链接。 在代码中它看起来像这样:

 public partial class User { public int Id { get; set; } public string Firstname { get; set; } public string Lastname { get; set; } public string Email { get; set; } } public class ApplicationUser : IdentityUser { public virtual Entities.User UserInfo { get; set; } public ApplicationUser() { UserInfo = new Entities.User(); } } 

在控制器中调用CreateUserAsync -method时,一切都会出错。 您可以在下面找到我的控制器代码。

 public class AccountController : BaseController { public UserManager UserManager { get; private set; } public async Task Register(RegisterViewModel model) { if (ModelState.IsValid) { var dbUser = new User { Firstname = model.FirstName, Lastname = model.LastName, Email = model.UserName }; db.Users.Add(dbUser); db.SaveChanges(); var appUser = new ApplicationUser(model.UserName); appUser.UserInfo = dbUser; try { var result = await UserManager.CreateAsync(appUser, model.Password); } catch (Exception e) { db.Users.Remove(dbUser); db.SaveChanges(); } } } } 

CreateUserAsync -method提供以下错误: The entity type ApplicationUser is not part of the model for the current context.

现在我的问题:

  1. 我这样做’mvc’方式吗? 我认为这对于我认为微不足道的事情来说是很多工作。
  2. 如果没有,有没有更好的方法来实现这一目标?

问题是您尝试将添加到一个DbContext的用户添加到您添加到其他DbContext(由UserManager创建)的ApplicationUser。

相反,您应该将其作为单个操作执行。 这样做:

 var dbUser = new User { Firstname = model.FirstName, Lastname = model.LastName, Email = model.UserName }; var appUser = new ApplicationUser(model.UserName); appUser.UserInfo = dbUser; try { var result = await UserManager.CreateAsync(appUser, model.Password); } catch (Exception e) { // show error or whatever }