EFv4.1是什麼意思?你的意思是過度使用代碼優先/流利API嗎?在這種情況下,主要是爲了簡單的映射場景。它提供了更多的L2S,但在高級映射方面仍然很少。
EF中可用的基本映射遵循基本規則:一個表=一個實體。實體可以是表示實體本身的主類的單個類或組合,也可以是映射字段集(複雜類型)的輔助類。
最先進的功能,你會用流利的EF-API或設計師得到的是:
- TPH繼承 - 在繼承層次結構中的多個表映射到同一個表。類型被稱爲鑑別器的特殊列不同。共享字段必須在父類中。
- TPT繼承 - 映射到單獨表=基本類型的每個類型都有一個表,每個派生類型也有一個表。共享字段必須在基本類型中定義,因此在基本表中定義。基表和派生表之間的關係是一對一的。派生實體跨越多個表。
- TPC繼承 - 每個類都有單獨的表=共享字段必須以基本類型定義,但每個派生類型都有自己的表。
- 實體拆分 - 實體被拆分成兩個或多個通過一對一關係相關的表。實體的所有部分都必須存在。
- 表格拆分 - 表格被拆分爲兩個或更多個與一對一關係相關的實體。
Designer還提供
- 條件映射 - 這不是真正的映射。它只是在映射級別上的硬編碼篩選器,您可以選擇一個或多個字段來限制允許加載的記錄。
當使用基本或更高級的功能表可以僅在一個映射參與。
所有這些映射技術遵循非常嚴格的規定。你的班級和表格必須遵循這些規則才能使其工作。這意味着您不能採取任意POCO並將其映射到多個表,而不滿足這些規則。
這些規則只能用EDMX和先進的方法與高級技能=不流利的API,沒有設計師,但定義XML EDMX手動修改時加以避免。一旦你走這條路,你可以使用
- 定義查詢 - 自定義SQL查詢用於指定加載新的「實體」。用於從已經映射實體指定新的「實體」的自定義查詢ESQL - 這也映射數據庫視圖
- 查詢視圖時的做法本身使用EDMX和設計師。它對預定義投影更有用,因爲與定義查詢相比,它有一些限制(例如不允許聚合)。
這兩個功能允許您定義類從多個表中合併。這兩種映射技術的缺點是映射結果是隻讀的。使用這些技術時,您必須使用存儲過程來保存更改。
應該用Nhibernate代替。其映射場景更復雜嗎? –
NHibernate提供了更好的映射功能,但是與EF中的流利API或設計器相比,映射可能更復雜,但與沒有設計器支持的EF中手動維護EDMX相比更直觀。 –
正如我所提到的,對於Kamyar而言,EF 4並不適合我。我會堅持L2S。我不會使用它的簡單映射,而是執行查詢並將它們按摩到我的POCO對象中,因爲它們包含大量EF 4無法處理的聚合。包括NHibernate在內的技術都不能將對象映射到字段,如逗號分隔的字段。 –