5

很多人写过关于使用 Automapper 将域对象(模型)映射到视图模型的文章,我觉得这非常有趣和有用,但我的问题是如何做相反的事情。我了解此过程的复杂性以及为什么 Automapper 在这种情况下不起作用,但我必须在表单发布时做很多事情,特别是在更新时。

我有一个模型,我将它映射到一个视图模型,然后我向用户呈现一个表单。然后,表单被发布,由于模型可能非常复杂,我使用自定义 ModelBinders 来处理响应并构建一个不会直接持久化的新模型。相反,我从数据库加载原始模型并调用一个方法来从发布的更新它而不破坏任何东西。但这变得重复,也许有更好的方法。

我见过的示例非常有限且幼稚,但在我们的应用程序中,我们现在可能有 50 多个像这样的表单发布场景并且还在不断增长。

4

1 回答 1

3

如果你想去另一个方向,首先创建另一个方向的地图,Mapper.Map()

接下来,您可能想要创建类型转换器(Mapper.CreateMap().ConvertUsing()),因为有时表单可以更多...字符串-y。

然后,您可能需要忽略或使用目标值。可以使用 ForMember(entity => entity.Id, opt => opt.Ignore()) 或 ForMember(entity => entity.ChildCollection, opt => opt.UseDestinationValue()) 进行配置。

最后,您需要使用采用现有目标对象 Mapper.Map(dto, entity) 的重载。

于 2009-10-16T13:06:55.127 回答