MVC ViewModel方法和映射。最好的方法

时间:2013-01-31 10:05:30

标签: asp.net-mvc automapper mass-assignment valueinjecter

我一直在研究解决MVC质量分配问题的不同方法,以及以正确的方式做事。

到目前为止,我认为最好的两种方法如下:(我也看过AutoMapper)

1:Value Injecter - 这似乎做得很好,但也依赖于第三方库

2:使用UpdateModel方法并绑定到View Model接口,该接口公开域模型中所需属性的子集。 http://www.codethinked.com/easy-and-safe-model-binding-in-aspnet-mvc

在我使用上述方法之一进入并编写整个应用程序(不用花费一周时间来找出我真正喜欢的那个)之前,有没有人有使用这两种方法的真实世界经验以及哪一个你会推荐吗?

2 个答案:

答案 0 :(得分:0)

在简单场景中,只有文本字段匹配字符串/ int属性,任何事情都可以。

但是当你在viewmodel上有与模型中的对象匹配的属性(DB中的FK)时,它会变得有点复杂,你可能需要从数据库中为某些单独的道具提取数据并映射该对象的某些属性到ViewModel,这样的东西。

prodinner asp.net mvc演示应用程序在Mapper类中使用了valueinjecter,这里有一个解释这种方法的pdf,你可以在这里下载:http://prodinner.codeplex.com/

答案 1 :(得分:0)

我在这个主题上所做的所有阅读的一般共识是,如果你从一个实体或领域模型(从你的数据库)到一个视图模型,在表单上显示随意使用自动化工具,如AutoMapper或任何您喜欢的自动化工具。

但是,如果您从输入或表单模型(通过自动模型绑定填充的对象)返回到您的实体或域模型,请不要自动执行此操作。正确导航是一个滑坡,可能导致您的自动化工具映射到非预期/允许的字段。我所读到的关于此的一切(以及我自己的各种实现)建议最佳做法是手动/明确地执行此操作。它非常简单,对象初始化器可以使它非常容易阅读。

var person = new Person()
{
    PersonId = model.PersonId,
    FirstName = model.FirstName,
    LastName= model.LastName
}

personService.UpdatePerson(person);

沿着那条线的东西。