EFコアの最新の夜間ビルドと多対多の関係を作成するにはどうすればよいですか?

entity-framework-core

質問

Fluent APIを使用して、 EF7 EF Coreの2つのテーブル間に多対多の関係を作成するにはどうすればよいですか?たとえば、次の表があるとします。

人々への写真のデータベース図

このような関係を定義するために、DbContextクラスのmodelBuilderをどのように活用するのでしょうか?

私はこのテーマに関するEFチームの会議ノートからこのリンクを見きましたが、それは去年のものであり、 EF7 EFコアでこれにアプローチする方法に関する新しい情報があるかどうか疑問に思っています。

私は、PhotosとPhotosPeopleとPeopleとPhotosPeopleの間の1対1の関係を作成することができます。私が望むようにデータベースが生成されますが、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 });
}

ナビゲートするには、[選択]を使用します。

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ