将项目添加到EF Core中的集合导航属性

时间:2019-03-15 01:32:53

标签: c# asp.net-core model-view-controller entity-framework-core

我有一个Project类,其中包含AppUsers

的集合
public class Project
{
    public int ProjectID { get; set; }

    [Required(ErrorMessage = " Please enter a project name")]
    public string Name { get; set; }

    [Required(ErrorMessage = " Please enter a project description")]
    public string Description { get; set; }

    public virtual ICollection<AppUser> ProjectManagers { get; set; }

    public bool UserIsAlreadyPM(string userId)
    {
        foreach(AppUser user in this.ProjectManagers)
        {
            if(user.Id == userId)
            {
                return true;
            }
        }
        return false;
    }
}

我的AppUser

public class AppUser : IdentityUser
{
    //add properties here later
}

我希望能够使任何特定的AppUser都在多个ProjectManagers的{​​{1}}之内。我通过存储库方法将Project添加到任何AppUser中:

Project.ProjectManagers

这是第一次将public void AddProjectManager(int projectID, AppUser user) { Project proj = context.Projects.FirstOrDefault(p => p.ProjectID == projectID); if(proj != null) { proj.ProjectManagers.Add(user); context.SaveChanges(); } } 添加到AppUser集合中的情况。但是,如果我尝试将它们添加到任何其他Project.ProjectManagers集合中,则将无法使用。如果将它们分配给任何后续的Project.ProjectManagers,我会得到一个主键错误,因为它们已经在数据库中的另一个项目下。

“ SqlException:违反主键约束'PK_AppUser'。无法在对象'dbo.AppUser'中插入重复键。重复键值为(xxxx)。“

1 个答案:

答案 0 :(得分:1)

请按如下所示编写您的代码:

flex-row sm:flex-col lg:flex-row justify-center h-full