介紹

在之前的 Entity Framework 快速上手介紹 之中,兩個實體之間只是簡單的一對一關(guān)系,而在實際的應(yīng)用場景中,還會出現(xiàn)多對多關(guān)系,同時還有可能會出現(xiàn)多對多關(guān)系還附帶有其他字段的情況。

下面以幾個例子,對表間多對多關(guān)系的類表示加以更加詳細(xì)地描述。雖然兩個場景舉例是使用的 C# 及 Entity Framework(Model First) 框架自動生成數(shù)據(jù)庫、實體類。但這種設(shè)計方法,并不只是在使用 ORM 框架時需要,事實上,它是 POCO 及簡單 Java 類(POJO)的設(shè)計原則之一。

場景實例

場景一

在考慮多對多關(guān)系還附帶有字段的情況之前,讓我們先看一下,多對多關(guān)系但不附帶額外字段的情況下,實體類代碼的表示。

此處使用 Entity Framework(Model First),快速將 model diagram 轉(zhuǎn)為數(shù)據(jù)庫中的表及實體類。

假設(shè)的場景是學(xué)生選課,一名學(xué)生可以選多門課,一門課也可以被多個學(xué)生選擇。E-R 圖如下所示:
平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

對應(yīng)自動生成的數(shù)據(jù)庫如下:

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

  • StudentSet
    平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

  • CourseSet
    平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

  • CourseRegistrationSet
    平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

    • 其中 Course_Id 與 Students_Id(注:此處詞尾(s)負(fù)數(shù)的原因參見上面 E-R 圖中右邊的 Properties 中 End1 Navigation Property 的設(shè)置)分別以另外兩張數(shù)據(jù)表的 Id 主鍵作為外鍵。

    • 同時 Course_Id與 Students_Id 兩者聯(lián)合做 CourseRegistrationSet 表的主鍵。

對應(yīng)自動生成實體類的代碼如下: