у меня возникли проблемы с отношением «многие ко многим» со связанной таблицей в Entity-Framework V6. Я использую MySql в качестве базы данных и всегда получаю одну и ту же ошибку.
Я пробовал много туто на youtube, stackoverflow, entityframeworktutorial, документации entityframework, но у меня всегда одна и та же ошибка, когда я пытаюсь создать отношение «многие ко многим».
Я использую .NET 4.7.2 Framework, MySQL 5.7.24, Entity Framework 6, MySql Connector 8.0.15, MySql.Data 6.10.8.0, MySQl.Data.Entity.EF6 6.10.8.0.
Это моя первая сущность:
[Table("course")]
public class Course
{
[Key]
[Column("idcourse")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
public virtual ICollection<StudentCourse> Students { get; set; }
}
Моя вторая сущность:
[Table("student")]
public class Student
{
[Key]
[Column("idstudent")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
// Important - virtual
public virtual ICollection<StudentCourse> Courses { get; set; }
}
И моя связанная таблица:
[Table("student_course")]
public class StudentCourse
{
[Key]
[Column("idstudent_course")]
public int Id { get; set; }
[Column("idstudent")]
[ForeignKey("Student")]
public int StudentId { get; set; }
[Column("idcourse")]
[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; }
}
Когда я запускаю добавление-миграцию [имя], проблем нет. Но когда я пытаюсь обновить базу данных, Visual Studio выдает мне эту ошибку: формат входной строки неверен. (переведите, потому что я французский, а моя IDE на французском)
У кого-то есть решение? Благодарить !





Я не знаком с MySQL, но общий подход к решению подобных проблем во время выполнения заключается в использовании профилировщика для базы данных SQL для извлечения SQL, который пытается запустить EF, а затем проверки и выполнения этого запроса вручную для базы данных, чтобы, надеюсь, выявить в какой колонке EF путается.
Используете ли вы какую-либо другую конфигурацию для отношений между студентом и курсом? Одна вещь, которую нужно проверить, — это проверить любое существующее сопоставление «многие ко многим» или добавить его, если оно не существует. EF может автоматически сопоставлять «многие ко многим», но, насколько я знаю, он ожидает определенных соглашений, таких как ожидание того, что соединяемая таблица будет иметь составной ключ.
Вы можете попробовать избавиться от лишнего ПК:
[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-to-many в каждом направлении.
моя миграция продолжает говорить мне ту же ошибку, я не знаю, почему я не могу обновить свою базу данных, чтобы получить хорошую схему :(
еще немного информации для исключения? Возможно, внутреннее исключение, трассировка стека или какая-либо часть запроса sql? это может помочь: stackoverflow.com/questions/49552550/…