介紹

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

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

場(chǎng)景實(shí)例

場(chǎng)景一

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

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

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

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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

  • StudentSet
    平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

  • CourseSet
    平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

  • CourseRegistrationSet
    平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

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

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

對(duì)應(yīng)自動(dòng)生成實(shí)體類(lèi)的代碼如下:

  • 網(wǎng)友評(píng)論