代码之家  ›  专栏  ›  技术社区  ›  Marc Climent

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

  •  5
  • Marc Climent  · 技术社区  · 15 年前

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

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

    我看到的示例非常模型化和幼稚,但是在我们的应用程序中,我们现在可能有50多个表单发布场景,比如这一个和不断增长的场景。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jimmy Bogard    15 年前

    如果要转到另一个方向,请首先创建指向另一个方向的地图mapper.map()。

    接下来,您可能需要创建类型转换器(mapper.createmap().convertusing()),因为有时候表单可能更…string-y。

    然后,您可能需要忽略或使用目标值。可以使用Formember(entity=>entity.id,opt=>opt.ignore())或Formember(entity=>entity.childCollection,opt=>opt.useDestinationValue())配置。

    最后,您需要使用一个重载,它接受一个现有的目标对象mapper.map(dto,实体)。