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.
现在我的问题:
- 我这样做’mvc’方式吗? 我认为这对于我认为微不足道的事情来说是很多工作。
- 如果没有,有没有更好的方法来实现这一目标?
问题是您尝试将添加到一个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 }