Создание отношений "многие ко многим" с использованием 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