无法将ApplicationUser ID插入我的上下文中

时间:2015-05-28 10:10:25

标签: asp.net-mvc entity-framework asp.net-mvc-5 ef-code-first

我在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”的成员。

我已将所有用户定义的模型放在不同的上下文中。也许这就是问题...

帮助! :)

1 个答案:

答案 0 :(得分:1)

如果您要引用身份模型,则需要处于相同的上下文中。一种选择是让您的应用上下文继承自IdentityDbContext。如果您尝试分离数据层,则会出现一些问题。否则你可以单独查找。 MVC5 Identity + multiple context in EntityFramework