Добавление данных со связью Many-To-Many WPF
Есть связь многим ко многим: Ученик и Группа, в одной группе может быть несколько учеников, так и ученик может числиться в нескольких группах Подскажите, РАДИ БОГА, как с помощью такой связи добавлять данные? Работаю в WPF через Entity FrameWork
Ответы (1 шт):
Два этого в EF Core
делает конфигурация для трёх таблицу - двух основных и третей дополнительной. Представим следующее:
public class Student
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
}
public class Group
{
public Guid Id { get; set; }
public string Name { get; set; }
}
Для связи между этими таблицами нужно создать третью таблицу, которая будет иметь связь один-ко-многим по отношению к каждой таблице:
public class GroupStudents
{
public Guid GroupId { get; set; }
public Group Group { get; set; }
public Guid StudentId { get; set; }
public Student Student { get; set; }
}
И добавляем ссылку на эту таблицу к предыдущим классам:
public class Student
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
public List<GroupStudents> Groups = new List<GroupStudents>();
}
public class Group
{
public Guid Id { get; set; }
public string Name { get; set; }
public List<GroupStudents> Students = new List<GroupStudents>();
}
Последний этап конфигурация. Напомню, что в Entity Framework Core можно настроить связь между таблицами только на одной из таблиц. В нашем случае, делаем конфигурацию для GroupStudents
:
public class GroupStudentsConfiguration : IEntityTypeConfiguration<GroupStudents>
{
public void Configure(EntityTypeBuilder<GroupStudents> builder)
{
// PK в это таблице является уникальная связка FK на связанные таблицы.
// Иными словами, вы не сможете добавить одного и того самого студента в одну групу
builder.ToTable("Groups students").HasKey(x => new { x.GroupId, x.StudentId });
builder.HasOne<Grop>(x => x.Group)
.WithMany(group => group.Students)
.HasForeignKey(x => x.GroupId);
builder.HasOne<Student>(x => x.Student)
.WithMany(student=> student.Groups)
.HasForeignKey(x => x.StudentId);
}
}
Всё.
Ресурсы для изучения: