表单发布方案和MVC中的复杂模型更新

时间:2009-10-16 08:25:09

标签: asp.net-mvc forms automapper

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

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

我见过的示例非常模型有限且天真,但在我们的应用程序中,我们现在可能有50多种表单发布方案,如此并且不断增长。

1 个答案:

答案 0 :(得分:3)

如果你想转向另一个方向,首先要将地图创建到另一个方向,Mapper.Map()

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

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

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