Добавление данных со связью Many-To-Many WPF

Есть связь многим ко многим: Ученик и Группа, в одной группе может быть несколько учеников, так и ученик может числиться в нескольких группах Подскажите, РАДИ БОГА, как с помощью такой связи добавлять данные? Работаю в WPF через Entity FrameWork


Ответы (1 шт):

Автор решения: Faraday

Два этого в 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);
    }

}

Всё.

Ресурсы для изучения:

→ Ссылка