Создание отношений «многие ко многим» с использованием 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? Когда бы вы использовали его и какие преимущества получили бы?


person Heberda    schedule 22.02.2014    source источник


Ответы (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.

person Moho    schedule 22.02.2014