Désolé, d'abord disons que j'ai essayé de rechercher ce problème en ligne et il y en a quelques-uns mais aucun spécifiquement lié à mon scénario. J'ai passé deux heures et je ne pouvais pas comprendre.Impossible de déterminer la fin principale de la relation, Plusieurs entités ajoutées peuvent avoir la même clé primaire
Je posterai mon code ci-dessous, dépouillant toutes les informations non pertinentes
Tout d'abord, voici mes cours
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 ...
}
Mappages:
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);
}
Ensuite, le code, ici, je suis en train de créer plusieurs nouveaux StudentParents, chacun avec son propre parent, à un étudiant.
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
Je reçois ce message:
Unable to determine the principal end of the 'Cobro.BusinessObjects.DatabaseContextServices.ParentDm_StudentParents' relationship. Multiple added entities may have the same primary key.
Cela ne se produit que lorsque je tente d'ajouter plus de 1 StudentParent à la fois. Je ne suis pas sûr pourquoi le nombre de StudentParents serait important? Je pense que j'ai les relations établies correctement.
Il fonctionne également avec l'ajout de plusieurs StudentGrades, mais la différence est que le modèle StudentGrade est plat (n'a pas un enfant comme StudentParent a un parent)