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);