2009-04-16 52 views
3

我想遵循DDD原理,而不是直接訪問集合的實體對象。所以,我必須調用根對象來獲取關聯的實體。但在其他情況下,我並不總是希望在調用根時加載所有關聯的實體。這是延遲加載的目的嗎?在沒有延遲加載的情況下訪問集合實體

如何通過根訪問實體對象,而無需每次加載所有關聯的對象,如果我禁用linq的lazyloading功能?

編輯:

例如,如果我有一個人的根實體,並且人有姓名,地址和OwnedProperties。如果我想獲得人員列表,以便我可以顯示他們的名字,我不會永遠想每次調用存儲庫時加載擁有的屬性。相反,在另一個頁面上,我可能想要顯示一個OwnedProperties列表,但不希望其他信息隨呼叫加載。只是在沒有擁有財產實體的情況下調用個人而不是創建沒有擁有財產的新個人對象的簡單方法是什麼?

+0

你能提供一個具體的例子嗎? – 2009-04-16 23:06:58

+0

可能不是。 DDD是那些沒有實際例子的含糊原則之一。 – cletus 2009-04-16 23:10:37

回答

1

我不認爲這是可能的,沒有延遲加載。

  • 獲得一次所有數據:預先加載
  • 獲取數據訪問時:延遲加載
1

根據您的編輯: 我在這些情況下做的,是建立一個「查看」類或者只包含我感興趣的屬性的'DTO'類。 例如,我可以有一個'PersonView'類,它只有一個Name屬性。

然後,使用我的OR/M映射(我使用NHibernate),我創建了一個HQL查詢(或Criteria查詢),它對我的​​'Person'實體起作用。在執行查詢之前,我告訴NHibernate我想要'PersonView'對象作爲結果(我指定了一個投影)。然後,NHibernate足夠聰明地執行一個只能檢索填充PersonView實例所需的列的查詢。

相關問題