Asp.net

將包含子集合的 DTO 映射回域模型的設計模式

  • January 3, 2011

很長一段時間以來,我一直在使用 AutoMapper 將我的域模型映射到我的 DTO,以及將我的 DTO 映射回域模型。

我正在為我的 ORM 使用 EF4,當被映射的模型包含需要添加/更新/刪除的子集合時,這個映射變得非常醜陋。隨著我的項目的推進,我越來越多地遇到這個問題:部落格文章的照片,訂單的包裹等。

當從 DTO-> 域模型開始時,我最終不得不添加一個 BeforeMap 呼叫,從域模型的集合中刪除所有實體,然後為從 DTO 獲取每個實體的 PK 的集合添加一個自定義 ValueResolver,抓住它從數據庫中(這樣實體框架不會認為我在添加新實體),並將其重新添加到域模型的集合中,然後將任何更新應用於各個欄位。

這是一個非常醜陋的解決方案,但我手動處理更新這些集合的嘗試也是如此。有人對更清潔的方法有任何建議嗎?

您可能希望使用ValueInjecter而不是 AutoMapper 來實現此功能。查看AutoMapper 與 ValueInjecter兩者的製造商都參與其中的這個問題。我沒有親自使用過 Value Injecter,但它是為做你想做的事情而建構的。AutoMapper 更適合展平,但 AutoMapper 的作者承認它不是“Unflattening”的好工具,這是您正在嘗試做的事情。

引用自:https://stackoverflow.com/questions/4587536