Я не знаком с MySQL, но общий подход к решению таких проблем во время выполнения состоит в том, чтобы использовать профилировщик для базы данных SQL для извлечения SQL, который EF пытается запустить, а затем проверить и выполнить этот запрос вручную по базе данных.надеюсь раскрыть, в какую колонку запутывается EF.
Используете ли вы какую-либо другую конфигурацию для отношений между студентом и курсом?Одна вещь, которую нужно проверить, это проверить любое существующее отображение «многие ко многим» или добавить его, если оно не существует.EF может автоматически сопоставлять многие со многими, но AFAIK ожидает определенных соглашений, таких как ожидание, что объединяющая таблица будет иметь составной ключ.
Вы можете попробовать избавиться от дополнительного PK:
[Table("student_course")]
public class StudentCourse
{
[Key, Column("idstudent", Order = 0)]
[ForeignKey("Student")]
public int StudentId { get; set; }
[Key, Column("idcourse", Order = 1)]
[ForeignKey("Course")]
public int CourseId { get; set; }
[Column("coursescore")]
public int CourseScore { get; set; }
public virtual Student Student { get; set; }
public virtual Course Course { get; set; }
}
Обычно EF ожидает автоматического управления присоединяющейся таблицей, когда вы даже не объявляете присоединяющуюся сущность.Это предполагает, что у студента будет коллекция курсов, а у курса - коллекция студентов.Недостатком этого является то, что вы потеряете любую дополнительную информацию о присоединяющемся объекте.(CourseScore) С присоединяющейся сущностью она становится 1-ко-многим-1 в отношении отображения EF, поэтому вам может понадобиться явно отобразить взаимосвязь через присоединяющуюся таблицу.(Либо через EntityTypeConfiguration, либо через событие OnModelCreating.
Т.е.
modelBuilder.Entity<Student>.HasMany(x => x.Courses).WithRequired(x => x.Student);
modelBuilder.Entity<Course>.HasMany(x => x.Students).WithRequired(x => x.Course);
Это гарантирует, что EF устанавливает отношения между Student / Course и StudentCourse как 1-ко-многим в каждом случае.