添加IdentityUser作为其他模型的属性

问题描述:

我正在玩ASP.NET身份,使用MVC5和EntityFramework 6.1.3。 我的问题是我无法将IdentityUser作为属性添加到另一个模型。添加IdentityUser作为其他模型的属性

我的应用程序可以让用户创建一个项目:

public class Project 
    { 
     public int ProjectID { get; set; } 
     public string ProjectName { get; set; } 
     public virtual ApplicationUser ApplicationUser { get; set; } 
    } 

在创建新项目的操作方法,我想添加在用户签订这样的:

public ActionResult Create([Bind(Include = "ProjectID,ProjectName")] Project project) 
     { 
      if (ModelState.IsValid) 
      { 
       // I added the first two lines of code below. 
       var loggedInUser = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); 
       project.ApplicationUser = loggedInUser; 
       db.Projects.Add(project); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(project); 
     } 

loggedInUser设置正确,它获取所有正确的属性。然而,当我尝试保存更新的情况下,我得到以下错误:

"Validation failed for one or more entities. The validation errors are: User name [email protected] is already taken." 

所以,由于某种原因,我的代码显然是试图代替将现有的创建项目,以创建一个新用户。为什么? 这不是将IdentityUser作为导航属性添加到模型的方式吗?

+0

两项一般性意见,为什么你就不能在用户ID存储为类的属性,并根据需要进行身份用户查找。似乎更多的资源高效。为什么你不能让这个类继承自身份用户模型?我认为一般而言,您的问题是在保存新模型更改过程中所考虑的问题,它正在尝试保存重复,就像错误所述。您需要在那里解决任何身份用户的一个实体并引用它,而不是尝试重新保存重复数据。这正是身份意味着唯一的一个。 –

我想你有two一对多relationship

Project实体可以只有一个user附加和user实体可以有一个或多个projects

因此,你需要附加的外键在Project类以正确允许Entity frameworkmap关系,并建立relational模型(数据库)和conceptual模型之间 关联。

public class Project 
{ 
    public int ProjectID { get; set; } 
    public string ProjectName { get; set; } 
    public int ApplicationUserId{ get; set;} 
    public virtual ApplicationUser ApplicationUser { get; set; } 
}