C# 重复代码第一个MVC多对多

C# 重复代码第一个MVC多对多,c#,asp.net-mvc,many-to-many,code-first,C#,Asp.net Mvc,Many To Many,Code First,我的模型: public class Person { [Key] public int IdPerson { get; set; } public string Name { get; set; } public List<Project> Projects { get; set; } } public class Project { [Key] public int IdProject {get; set;} pub

我的模型:

public class Person
{
    [Key]
    public int IdPerson { get; set; }

    public string Name { get; set; }

    public List<Project> Projects { get; set; }
}

public class Project
{
    [Key]
    public int IdProject {get; set;}

    public string Name { get; set; }

    public ICollection<Person> Members { get; set; }
}
双重的人,我不想重复或插入一个新的人,当我这样做


为什么会这样?

您的
项目的上下文是什么?它可能是加倍的,因为您从存储库中获取的
个人
实体
不在您的
项目
对象所属的上下文中。因此,当上下文试图创建/更新您的
项目
实体时,它会将其加倍


尝试将
人员
附加到同一上下文,或者确保两个存储库中都有一个上下文。

您的
项目
附加到哪个上下文?它可能是加倍的,因为您从存储库中获取的
个人
实体
不在您的
项目
对象所属的上下文中。因此,当上下文试图创建/更新您的
项目
实体时,它会将其加倍

尝试将
人员
附加到相同的上下文,或者确保两个存储库中都有一个上下文

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Project>()
        .HasMany(p => p.Members)
        .WithMany(e => e.Projects)
        .Map(pe =>
        {
            pe.ToTable("ProjectPersonTable");
            pe.MapLeftKey("IdPerson");
            pe.MapRightKey("IdProject");
        });
}
 Person person = personRepository.GetSingle(Idperson);
 project.Members.Add(person);