我建設,我使用下面流動的ASP.NET MVC應用程序:AutoMapper的體系結構?
獲取實體
- 運行動作在控制器
- 從FactoryClass獲取數據,對模型進行操作(實體框架)
- 獲取數據返回到控制器中的操作
- 使用AutoMapper從Model對象轉換爲ModelView對象
- 迴歸模型視圖對象的強類型查看
更新實體
- 運行動作與模型視圖實體輸入(DefaultDataBinder將被使用)
- 驗證模型視圖實體
- 直接將ModelView對象發送給正確的工廠方法。
- 檢查ModelView對象是否有標識,如果是這樣從數據庫中獲取Model對象
- 使用AutoMapper將傳入的ModelView對象轉換爲Model對象/實體。如果其更新,則使用提取的Model對象作爲目標。
- 如果是更新使用刷新Client.Wins其他使用添加
- 運行SaveChanges並返回到控制器。
問題1
的模型視圖的類被特製用於該複合控制器操作被連接到(它可以同時包含edeting對象和列表)的意見。不同視圖的幾個動作使用相同的ModelView類是很常見的,這意味着ModelView對象中的所有對象都不會用在每個動作/視圖中。
只要查看使用可更新是沒有問題的,但ModelViewObjects的所有屬性...
說,我們得到了一些地方的ModelViewObject的屬性不使用視圖,這ModelViewObject被髮送到工廠(將被更新),在該工廠中獲取corsponding ModelObject(從數據庫/實體框架),然後用AutoMapper與ModelViewObject合併。這裏的問題是未設置ModelViewObject的屬性(未在視圖中使用)將導致在ModelObject中覆蓋實際數據。
爲了解決這個ü通常使用AutoMapper ForMember Ignor(),但這將是當完整ModelViewObject(所有屬性設置)將更新數據庫的一個問題。
你是如何處理這個問題的?在不同的AutoMapper設置下的Factorys中有不同的更新方法嗎?
這將是很好,如果我只能有一個這樣的方法:UpdateMyEnityt(myEntity所實體),這methid將更新OCH myEntity所添加的對象。
問題2
我應該在哪裏放置AutoMapper映射?到目前爲止,我已經在控制器中放置了更新和獲取。我曾想過在ModelViewObject中放置映射,例如ModelViewObject.ToDataModel,但如果我不需要完整的翻譯(som屬性將被忽略),那麼我將不得不在AutoMapper中執行其他位置。
你是如何處理這個問題的?
問題3
說,你已經在我們的工廠類的工作更新方式使用AutoMapper與SOM ignors翻譯一個ModelViewObject到模型視圖(實體框架對象)。現在說我們用新的字段/屬性更新了數據庫表,如果我們運行一個視圖來處理與此表對應的ModelViewObject,但不處理新的屬性,這將意味着屬性將始終設置爲空/字符串。空/ 0。在工廠運行常規更新方法時,不會忽略此屬性,這意味着零值會覆蓋實際值。
這是一種很大的風險,這種更新將會完成,而且我不會記得在舊代碼中處理這種更新的風險。
我該如何處理?
問題4 AutoMapper有一個驗證方法,您可以檢查是否映射將成爲可能,現在我有這些驗證其中映射完成後,我應該莫比把這個在其他一些方法,其中驗證將會像應用程序啓動一樣快地執行?使用該功能時,映射中的其他問題將首先顯示。
BestRegards
存在這個問題太大 - 考慮總結段落 - 這是一個Q&A論壇,不是散文寫作。 :) – RPM1984 2010-12-16 10:49:55
Yhea我知道,但我討厭問題,以保持它更短,有這麼多,可以決定什麼aswear可能。 – Banshee 2010-12-16 13:54:24