Извините, сначала позвольте мне сказать, что я попытался найти эту проблему в Интернете, и есть некоторые, но не связанные с моим сценарием. Я провел пару часов и не мог понять.Невозможно определить главный конец отношения. Несколько добавленных объектов могут иметь один и тот же первичный ключ
Я пост моего кода ниже, зачистка всей ненужной информации
Первого, вот мои классы
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);
}
Тогда код, здесь я пытаюсь создайте для ученика несколько новых учеников, каждый со своим новым родителем.
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 в то время. Я не уверен, почему было бы важно число учеников? Я думаю, что у меня правильные отношения.
Он также работает с добавлением нескольких StudentGrades, но разница в том, что StudentGrade модель является плоской (не имеет ни одного ребенка, как StudentParent имеет Parent)