2

將實體映射到與EF5的三元關係的最佳方式是什麼?如何建立三元關係

例如,三個實體:

Bike 
Crash 
Person 

然後會有一個三元關係,要知道:

  1. 自行車其中的人卻在崩潰介入X
  2. 的人自行車X和Y之間的碰撞X
  3. 涉及自行車B上的人A的碰撞事故

我該如何創建我的實體? 是爲三元關係創建一個新實體的唯一可能性嗎?

回答

2

選項1

假設有,可以在不Crash ES存在Person-Bike組合(感謝神)。因此,假設自行車不屬於特定人員,那麼您可以創建具有FK的人與自行車的二元關係(路口表)PersonBike。 EF可以處理這種多對多的關係,而不需要模型中的關聯類。

然後,太糟糕了,人 - 自行車組合可能會涉及到崩潰。一次崩潰中可能有兩種以上的組合。基本上你可以在Crash有一個集合PersonBikes。在這種情況下,模型中根本沒有關聯類。但是,如果您想了解更多關於CrashPersonBike之間的關聯的信息,例如誰是有罪的崩潰,你需要兩個之間的聯合表:CrashPersonBike與FK的CrashPersonBike和一個或多個字段描述的關聯(如有罪是/否)。這將需要EF模型中的關聯類。

選項2輛

自行車有具體的所有者(人):讓PersonBikes集合(表自行車有一個FK對個人)。現在只需用自行車來描述碰撞就足夠了,因爲自行車決定着人。因此,Crash可以具有Bikes集合(再次:模型中不存在關聯類)或包含如上所述更多細節的關聯類CrashBike

選項3

,需要在模型關聯類(CrashPersonBike),有或沒有額外的詳細信息的「真」的三元關係。

在所有情況下,您都需要業務邏輯來防止同一人(或選項1和3中的自行車)捲入一次事故。選項1和2具有額外的好處,因爲除了崩潰之外,該模型可以描述人 - 自行車組合。是否應該是1或2取決於自行車人的所有權。

+0

格特,非常感謝您的詳細解答!現在這將是一個考慮哪個更適合我的應用程序的問題。 – polonskyg

+0

嘿,我想了解如何管理選項1(在'Crash'中有一個'PersonBike'集合)和「模型中沒有關聯類」。如果我將'PersonBike''FK'給'Crash','PersonBike'成爲一個實體,並且我失去了'Person'和'Bike'之間的直接多對多關係。有沒有辦法避免這種情況?順便說一句,我使用EF4。 – nmclean