【发布时间】:2016-06-14 18:11:16
【问题描述】:
对不起,首先让我说我确实尝试在网上搜索这个问题,并且有一些但没有与我的场景特别相关。我花了几个小时想不通。
我在下面发布我的代码,删除所有不相关的信息
首先,这是我的课程
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 ...
}
映射:
public StudentMap()
{
HasMany(m => m.StudentParents).WithRequired().HasForeignKey(m => m.StudentId).WillCascadeOnDelete(false);
}
public StudentParentMap()
{
HasRequired(m => m.Student).WithMany().HasForeignKey(m => m.StudentId).WillCascadeOnDelete(false);
HasRequired(m => m.Parent).WithMany().HasForeignKey(m => m.ParentId).WillCascadeOnDelete(false);
}
public ParentMap()
{
HasMany(m => m.StudentParents).WithRequired().HasForeignKey(m => m.ParentId).WillCascadeOnDelete(false);
}
然后是代码,这里我试图为一个学生创建多个新的 StudentParent,每个都有自己的新 Parent。
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.
仅当我尝试一次添加超过 1 个 StudentParent 时才会发生这种情况。我不确定为什么 StudentParents 的数量很重要?我认为我的关系设置正确。
它也适用于添加多个 StudentGrade,但不同之处在于 StudentGrade 模型是扁平的(没有像 StudentParent 这样的任何孩子有一个 Parent)
【问题讨论】:
标签: c# .net entity-framework-4 entity-framework-6 entity-framework-5