我在MVC5中使用代码优先,我设计了一些模型以包含对ApplicationUser的引用。我们的想法是将您在重要业务对象上创建行的用户保存起来。
e.g。 模型:
public class Guest
{
..... other properties
public ApplicationUser CreatedByUser { get; set; }
}
控制器:
public ActionResult Create(GuestVM model)
{
if (!ModelState.IsValid)
{
.....
return View(model);
}
// Initialize a new instance of the data model and set its properties
Guest guest = new Guest()
{
......
CreatedByUser = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(User.Identity.GetUserId())
};
db.Guests.Add(guest);
db.SaveChanges();
return RedirectToAction("Index");
}
如果我在db.Guests.Add(guest)之前放置一个断点,它会正确地接收我的用户;我可以在那里看到正确的信息。
这是OnModelCreating
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).Property(p => p.Name).IsRequired();
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
modelBuilder.Entity<IdentityUserLogin>().HasKey(u => new { u.UserId, u.LoginProvider, u.ProviderKey });
}
然而,它失败并出现以下错误
元数据集合中不存在标识为“Project.DAL.Guest_CreatedByUser”的成员。
我已将所有用户定义的模型放在不同的上下文中。也许这就是问题...
帮助! :)
答案 0 :(得分:1)
如果您要引用身份模型,则需要处于相同的上下文中。一种选择是让您的应用上下文继承自IdentityDbContext。如果您尝试分离数据层,则会出现一些问题。否则你可以单独查找。 MVC5 Identity + multiple context in EntityFramework