Создание отношений "многие ко многим" с использованием Fluent API в Entity Framework

Используя API Entity Framework, я постоянно сталкиваюсь со следующими двумя способами сопоставления множества отношений? Я никогда не использовал второй вариант... в чем разница?

Опция 1:

modelBuilder.Entity<Student>()
    .HasMany( p => p.Lessons)
    .WithMany();

Вариант 2:

modelBuilder.Entity<Student>()
.HasMany(p => p.Lessons)
.WithMany() 
.Map(m =>
{
    m.MapLeftKey("Id");
    m.MapRightKey("Id");
    m.ToTable("StudentAndLessons");
});

Что именно делает MapLeftKey а также MapRightKey делать? Когда вы будете его использовать и какие выгоды вы получите?

1 ответ

Решение

С использованием .Map(...) Метод в этом сценарии позволяет определить имя соединительной таблицы, а также имена столбцов в указанной соединительной таблице. MapLeftKey(string) установит имя поля FK соединительной таблицы, ссылающейся на ключ для Student, Точно так же, MapRightKey(string) задает имя поля FK соединительной таблицы, ссылающейся на ключ Lesson Таблица. Более описательное использование выглядит следующим образом:

modelBuilder.Entity<Student>()
    .HasMany(p => p.Lessons)
    .WithMany() 
    .Map(m =>
    {
        m.MapLeftKey("StudentId");
        m.MapRightKey("LessonId");
        m.ToTable("StudentLesson");
    });

Без использования .Map метод, EF решит, как назвать таблицу соединений и связанные столбцы FK

Другие вопросы по тегам