添加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作为导航属性添加到模型的方式吗?
答
我想你有two
表一对多relationship
。
Project
实体可以只有一个user
附加和user
实体可以有一个或多个projects
。
因此,你需要附加的外键在Project
类以正确允许Entity framework
到map
关系,并建立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; }
}
两项一般性意见,为什么你就不能在用户ID存储为类的属性,并根据需要进行身份用户查找。似乎更多的资源高效。为什么你不能让这个类继承自身份用户模型?我认为一般而言,您的问题是在保存新模型更改过程中所考虑的问题,它正在尝试保存重复,就像错误所述。您需要在那里解决任何身份用户的一个实体并引用它,而不是尝试重新保存重复数据。这正是身份意味着唯一的一个。 –