C# 无法确定关系的主体端,多个添加的实体可能具有相同的主键

C# 无法确定关系的主体端,多个添加的实体可能具有相同的主键,c#,.net,entity-framework-4,entity-framework-6,entity-framework-5,C#,.net,Entity Framework 4,Entity Framework 6,Entity Framework 5,对不起,首先让我说,我确实尝试在网上搜索这个问题,有一些,但没有具体涉及到我的情况。我花了几个小时,弄不明白 我把代码贴在下面,去掉所有不相关的信息 首先,这是我的课程 public class StudentDm { public int Id { get; set; } public virtual List<StudentParentDm> StudentParents { get; set; } // other properties ... }

对不起,首先让我说,我确实尝试在网上搜索这个问题,有一些,但没有具体涉及到我的情况。我花了几个小时,弄不明白

我把代码贴在下面,去掉所有不相关的信息

首先,这是我的课程

public class StudentDm
{
    public int Id { get; set; }
    public virtual List<StudentParentDm> StudentParents { get; set; }

    // other properties ...
}

// constructs a many to many relationship with some additional info in this model
public class StudentParentDm : EntityBaseDm
{
    public int Id { get; set; }
    public int StudentId { get; set; }
    public virtual StudentDm Student { get; set; }
    public int ParentId { get; set; }
    public virtual ParentDm Parent { get; set; }

    // other properties ...
}

public class ParentDm
{
    public int Id { get; set; }

    // other properties ...
}
然后是代码,这里我尝试创建多个新的StudentParents,每个都有自己的新家长,给一个学生

foreach (StudentParentDm studentParent in studentParents) // foreach new studentParent
{
    StudentParentDm trackedStudentParent;
    if (studentParent.Id == 0)
    {
        trackedStudentParent = new StudentParentDm
        {
            Parent = new ParentDm()
        };

        // map from studentParent to trackedStudentParent, including the Parent
        // ...

        trackedStudent.StudentParents.Add(trackedStudentParent);
    } else 
    {
        // unimportant
    }
}

unitOfWork.Commit() // blows up with error message
然后我得到这个信息:

Unable to determine the principal end of the 'Cobro.BusinessObjects.DatabaseContextServices.ParentDm_StudentParents' relationship. Multiple added entities may have the same primary key.
只有当我尝试一次添加多个学生家长时,才会发生这种情况。我不知道为什么学生家长的数量会很重要?我想我已经正确地建立了关系


它还可以添加多个StudentGrade,但不同的是StudentGrade模型是扁平的(没有任何孩子像StudentParent有家长一样)

,因为没有人回答。我会把我的发现发出去,以防对任何人都有帮助

在StudentParentMap中,添加

m => m.Parent
以致

HasMany(m => m.StudentParents).WithRequired(m => m.Parent).HasForeignKey(m => m.ParentId).WillCascadeOnDelete(false);
不知道为什么这很重要。。映射似乎足够了,这样代码第一次生成的数据库关系就不会随着这个新添加而改变。然而,EF需要弄清楚如何在多记录添加事务期间配置FK。这对我来说相当微妙

HasMany(m => m.StudentParents).WithRequired(m => m.Parent).HasForeignKey(m => m.ParentId).WillCascadeOnDelete(false);