DbUpdateExceptionC# + EntityFramework
Имею класс билета
public int Id { get; set; }
public byte Semester { get; set; }
public int CollegeId { get; set; }
[ForeignKey("CollegeId")]
public virtual College College { get; set; }
public int AssociateDirectorId { get; set; }
[ForeignKey("AssociateDirectorId")]
public virtual AssociateDirector AssociateDirector { get; set; }
public int SpecialtyId { get; set; }
[ForeignKey("SpecialtyId")]
public virtual Specialty Specialty { get; set; }
public int CyclicalCommissionId { get; set; }
[ForeignKey("CyclicalCommissionId")]
public virtual CyclicalCommission CyclicalCommission { get; set; }
public virtual ICollection<Subject> Subjects { get; set; }
public virtual ICollection<Teacher> Teachers { get; set; }
public virtual ICollection<Question> Questions { get; set; }
Я генерирую такие билеты, выбирая экземпляры teachers,subjects и рандомно вытягивая questions из бд, но при попытке сохранения получаю Exception. College и Teacher относятся друг к другу как многие к одному. Т.е у Teacher есть CollegeId а у College есть список объектов Teacher.
System.Data.Entity.Infrastructure.DbUpdateException: "Unable to determine the principal end of the 'Examens.DataBase.Teacher_College' relationship. Multiple added entities may have the same primary key.
Код заполнения такой
for(int i = 0; i< count;i++)
{
/*Логика заполнения*/
Card card = new Card()
{
AssociateDirector = (Directors.SelectedItem as AssociateDirector),
College = (Colleges.SelectedItem as College),
CyclicalCommission = (Comissions.SelectedItem as CyclicalCommission),
Specialty = (Specialties.SelectedItem as Specialty),
Questions = cardQuestions,
Semester = byte.Parse(Semester.Text),
Subjects = subjects,
Teachers = teachers
};
cards.Add(card);
}
using (ExamsDbContext edc = new ExamsDbContext())
{
edc.Cards.AddRange(cards);
edc.SaveChanges();
}
А вот код классов, которые я вообще использую
public class AssociateDirector
{
public int Id { get; set; }
[Required] [MaxLength(30)] public string Name { get; set; }
[Required] [MaxLength(30)] public string Surname { get; set; }
[Required] [MaxLength(30)] public string LastName { get; set; }
public int CollegeID { get; set; }
public virtual College College { get; set; }
public virtual ICollection<Card> Cards { get; set; }
public override string ToString()
{
return string.Format("{0} {1}.{2}.", Surname, Name[0], LastName[0]);
}
}
public class Chairman
{
public int Id { get; set; }
[Required] [MaxLength(30)] public string Name { get; set; }
[Required] [MaxLength(30)] public string Surname { get; set; }
[Required] [MaxLength(30)] public string LastName { get; set; }
public virtual ICollection<CyclicalCommission> CyclicalCommissions { get; set; }
public override string ToString()
{
return string.Format("{0} {1}.{2}.", Surname, Name[0], LastName[0]);
}
}
public class College
{
public int Id { get; set; }
[Required] [MaxLength(150)]public string Name { get; set; }
public virtual ICollection<AssociateDirector> AssociateDirectors { get; set; }
public virtual ICollection<CyclicalCommission> cyclicalCommissions { get; set; }
public virtual ICollection<Specialty> Specialties { get; set; }
public virtual ICollection<Teacher> Teachers { get; set; }
public virtual ICollection<Card> Cards { get; set; }
public override string ToString()
{
return Name;
}
}
public class CyclicalCommission
{
//TODO: CyclicalCommission is ready
public int Id { get; set; }
[Required] [MaxLength(100)] public string Name { get; set; }
public int ChairmanId { get; set; }
public int CollegeId { get; set; }
[ForeignKey("CollegeId")]
public virtual College College { get; set; }
public virtual Chairman Chairman { get; set; }
public virtual ICollection<Card> Cards { get; set; }
public override string ToString()
{
return Name;
}
}
public class Question
{
//TODO: Question is ready
public int Id { get; set; }
[Required] public string Text { get; set; }
public byte[] Image { get; set; }
public int Complexity { get; set; }
public int SubjectId { get; set; }
[ForeignKey("SubjectId")]
public virtual Subject Subject { get; set; }
public virtual ICollection<Card> Cards { get; set; }
}
public class Specialty
{
public int Id { get; set; }
[Required] [StringLength(8)] public string Code { get; set; }
public virtual ICollection<College> Colleges { get; set; }
public virtual ICollection<Subject> Subjects { get; set; }
public virtual ICollection<Card> Cards { get; set; }
public override string ToString()
{
return Code;
}
}
public class Subject
{
public int Id { get; set; }
[Required] [MaxLength(100)] public string Name { get; set; }
public virtual ICollection<Teacher> Teachers { get; set; }
public virtual ICollection<Specialty> Specialties { get; set; }
public virtual ICollection<Question> Questions { get; set; }
public virtual ICollection<Card> Cards { get; set; }
public override string ToString()
{
return Name;
}
}
public class Teacher
{
public int Id { get; set; }
[Required] [MaxLength(30)] public string Name { get; set; }
[Required] [MaxLength(30)] public string Surname { get; set; }
[Required] [MaxLength(30)] public string LastName { get; set; }
public int CollegeId { get; set; }
[ForeignKey("CollegeId")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual College College { get; set; }
public virtual ICollection<Subject> Subjects { get; set; }
public virtual ICollection<Card> Cards { get; set; }
public override string ToString()
{
return string.Format("{0} {1}.{2}.", Surname, Name[0], LastName[0]);
}
}