编程语言
首页 > 编程语言> > C#-将IdentityUser添加为其他模型的属性

C#-将IdentityUser添加为其他模型的属性

作者:互联网

我正在使用MVC5和EntityFramework 6.1.3来研究ASP.NET Identity.
我的问题是我无法将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);
        }

loggingInUser设置正确,它获取所有正确的属性.但是,当我尝试保存更新的上下文时,出现以下错误:

"Validation failed for one or more entities. The validation errors are: User name hellogoodnight@gmail.com is already taken."

因此,出于某种原因,我的代码显然试图创建一个新用户,而不是将现有用户添加到创建的Project中.为什么?
这不是将IdentityUser作为导航属性添加到模型的方法吗?

解决方法:

我想您有两个表具有一对多关系.

项目实体只能具有一个用户,用户实体可以具有一个或多个项目.

因此,您需要在Project类中附加外键,以允许Entity Framework正确映射关系并建立
关系模型(数据库)和概念模型之间的关联.

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

标签:asp-net-identity,c,asp-net-mvc,entity-framework
来源: https://codeday.me/bug/20191025/1930616.html