我正在使用ASP.NET身份,使用MVC5和EntityFramework 6.1.3。 我的问题是我无法将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 hellogoodnight@gmail.com is already taken."
因此,出于某种原因,我的代码显然试图创建一个新用户,而不是将现有用户添加到创建的Project中。为什么? 这不是将IdentityUser作为导航属性添加到模型的方法吗?
答案 0 :(得分:4)
我认为您有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":1, "payload":[{"foo":1, "lol":2},{"foo":2, "lol":2}]}