2013-02-23 115 views
0

我已經閱讀了很多關於如何使用EF Code First和流暢的配置來配置多對多的智能關係。但我不明白爲什麼我應該爲交接表創建一個額外的實體。讓我們假設我有以下實體:EF代碼第一多對多關係沒有實體

Department 
---------- 
Id 
Name 

Material 
---------- 
Id 
Name 

現在我想保留每個部門的材料記錄。所以我需要

DepartmentMaterial 
------------------- 
DepartmentId 
MaterialId 
Quantity 

我到目前爲止閱讀的內容我需要3個實體:Department,Material和DepartmentMaterial。所以實際上,我將每個表映射到一個相應的實體,而當我開始瞭解DDD時,我並不打算這樣做。我假設EF將自動映射該交接表,並且還可以通過Department對物料數量進行查詢。

因此,EF Code First可以在沒有額外實體的情況下流利地配置這種關係嗎?

回答

1

如果它只是得到兩個外鍵(DepartmentId, MaterialId),則結點表可以不在概念模型(類模型)中。你想記錄一些關於關聯的數據。沒關係,數量屬於那裏。部門有數量x材料y。說一個部門有數量是沒有意義的。

這不符合DDD原則。協會班是班級模特中的一等公民。它甚至可能有其自己的行爲(如限制某些部門/物料組合的數量)。

這意味着您的模型不會包含多對多關聯,但Department 1-n DepartmentMaterial n-1 Material。你必須通過聯結表查詢部門的材料。這是一個非常普遍的情況。在現實生活中我幾乎沒有看到純粹的聯結表。他們是收藏家的物品。

實施例的查詢:

var query = from d in db.Departments 
      from dm in d.DepartmentMaterials 
      select new { Department = d, Materials = dm.Select(x => x.Material)};