如何與最新的EF Core夜間版本建立多對多的關係?

entity-framework-core

如何使用Fluent API在EF7 EF Core中的兩個表之間創建多對多關係?例如,假設您有以下表格:

照片到人數據庫圖

如何利用DbContext類中的modelBuilder來定義這樣的關係?

我已經看到了EF團隊關於這個主題的會議記錄中的這個鏈接,但它是從去年開始,我想知道是否有關於如何在EF7 EF Core中處理此問題的新信息。

我能夠在Photos和PhotosPeople以及People和PhotosPeople之間創建一對多的關係。數據庫是按照我的喜好生成的,但人與照片之間的導航現在需要與中間實體進行交互。我想避免這個。

一般承認的答案

這由#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

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; }
}

要導航,請使用選擇:

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; }
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因