Как создать много-много отношений с новейшими ночными сборками EF Core?

entity-framework-core

Вопрос

Как вы используете Fluent API для создания отношения многих-многих между двумя таблицами в EF7 EF Core? Например, скажем, что у вас есть следующие таблицы:

Диаграмма «Фотографии для людей»

Как можно было бы использовать modelBuilder в классе DbContext для определения таких отношений?

Я видел эту ссылку из заметок совещания EF по этой теме, но это с прошлого года, и мне интересно, есть ли новая информация о том, как подойти к этому в EF7 EF Core.

Я могу создать один-много отношений между фотографиями и фотографиями, а также людьми и фотографиями. База данных создается так, как мне бы хотелось, но для навигации между People и Photos теперь требуется взаимодействие с промежуточным объектом. Я бы хотел этого избежать.

Принятый ответ

Это отслеживается # 1368 . Обходной путь состоит в том, чтобы сопоставить таблицу соединений с сущностью:

class Photo
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

class PersonPhoto
{
    public int PhotoId { get; set; }
    public Photo Photo { get; set; }

    public int PersonId { get; set; }
    public Person Person { get; set; }
}

class Person
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

Не забудьте настроить PersonPhoto с помощью составного ключа:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<PersonPhoto>().HasKey(x => new { x.PhotoId, x.PersonId });
}

Для навигации используйте Select:

// person.Photos
var photos = person.PersonPhotos.Select(c => c.Photo);


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему