2011-05-30 50 views
0

有關存儲庫模式和查詢對象模式的問題。我使用EF 4,並使用VS 2010中的ADO.NET POCO實體生成器從我的數據庫模型中生成了POCO類.Edmx文件和tt文件(POCO類)位於2個不同的項目中。使用EF 4和存儲庫模式的對象查詢模式

我的存儲庫是特定於域的,例如DocumentRepository和UserRepository。我的數據庫模型與我的域模型有所不同,我已經實現了映射器以將域對象轉換爲一個或多個數據庫表(反之亦然)。一個例子是我的文檔域類在數據庫中被建模爲3個表格(因此是POCO類)。

當在這種情況下使用域對象時,您將如何實現查詢對象模式?我看到它的方式,我將不得不寫基於POCO類而不是域類的查詢對象?但是,這不會破壞存儲庫模式嗎?

+0

entity-framework 4.1允許你將一個實體分成多個表。這樣它就不會破壞回購模式。 – Eranga 2011-05-30 08:56:48

回答

3

ORM通常用於直接與域對象一起工作的方式=從數據庫加載它們並將它們保存到數據庫中。你正在做更多的抽象步驟,你只使用ORM實體來填充你的自定義對象。您的自定義對象完全超出了您的ORM工具的範圍,您不能指望ORM工具將爲您在域對象之上構建的查詢提供任何支持。您必須構建自己的查詢支持,並將域查詢翻譯到存儲庫中的ORM查詢。這通常通過實現規範模式來完成。

Btw。在這種情況下,POCO沒有太大意義 - POCO適用於您想將它們用作域對象的場景)。

+0

我意識到我努力實現存儲庫模式會創建一個有點複雜的設計,因爲我不想在我的演示文稿和業務層中使用我的POCO類。我覺得他們沒有按照他們應該的方式建模我的域,這就是爲什麼我開始使用域類。我看不出爲什麼規範模式是要走到這裏的路,但之前我沒有使用它。 – OKB 2011-05-30 09:17:56

+0

規範將允許您以您在域模型頂部需要的方式定義查詢,並將其轉換爲存儲庫中EF所需的EF查詢。 – 2011-05-30 09:30:10

+0

因此,我需要將域查詢的翻譯邏輯寫入EF查詢中。我不確定是否有時間完成所有這些操作,並且它使事情變得複雜化。如果我在規範中使用POCO類,並在它們上面寫入查詢,我是否會破壞圖層邊界?畢竟,我的目標是通過使用域對象來隱藏數據模型。也許我應該重新考慮在這個項目中使用存儲庫模式。 – OKB 2011-05-30 10:54:33