2011-03-15 151 views
1

我想這已經在here之前問過了,但我仍然對要採取的正確方法感到困惑。堅持把多個DTO映射到一個實體

我有一個WPF客戶端應用程序,它與WCF服務進行通信以檢索數據。 在服務方面,我有一個大型實體(大約25個屬性),並且在我的客戶端應用程序中有三種形式: 。 在每個表單上,我需要該工具來編輯我的域實體的某些屬性。 我不想通過服務返回大型實體,因爲我需要在每個表單上僅有3-4個屬性。 因此,我創建了三個DTO(我們使用AutoMapper),每個屏幕一個。 該服務返回DTOs,並且在檢索過程中這非常有效。

我的問題是我如何堅持我的DTOs。 我們在服務層使用NHibernate。 如果我將部分DTO傳遞給服務來保存,那麼每次都需要重新加載我的大型實體以執行更新。

這是處理這種情況的唯一方法嗎?

如果我需要在UI上顯示單個實體的部分視圖,還有什麼其他選項?除了通過線纜發送整個實體..或創建三個DTO?

謝謝。

回答

1

在服務層使用NHibernate這是合乎邏輯的,你將需要:

一)更新操作過程中,在服務加載實體,修改所需的屬性,然後提交事務,或

b)如果你有對象已經在服務中可用(但不與NHibernate會話相關),那麼你可以修改所需的屬性,調用session.Update(obj)重新關聯對象與會話,然後提交你的事務。

我們經常使用第一種方法,在我們的模型中有數百個不同的實體。我們將專門的命令請求對象從客戶端傳遞到服務器,然後我們的服務層負責執行命令請求中指定的工作。

或者,您可以按照概述here制定HQL查詢。但這會很快變得非常難看,難以維護。

+0

謝謝..我想我必須在更新過程中加載實體。 HQL變得相當混亂! – Sennin 2011-03-17 04:52:27