想要摆脱ViewBag在我的意见,所以我做了一些关于viewmodels的研究。 我喜欢使用它进行演示的想法,在这里没有问题。 但我不知道什么是使用viewmodels进行更新的最佳方式。asp.net mvc使用viewmodel来创建和编辑
首先,为什么我不应该使用我的EF实体[MetadataType(typeof(User_Validation))]?
public ActionResult Edit(User user)
{
...
}
其中User是EntityObject。
然后,如果我使用viewmodels它有另一个问题:here人们认为应该使用嵌套viewmodels,但here是另一种观点(他说,“他们不是域模型的包装”)。谁是对的?
另外,什么是POST后更新对象的最佳方式(不使用tryupdatemodel,因为here而不仅仅是人们反对这种方法)。我试图使用ApplyCurrentValues,但是如果有一些复杂的更新逻辑与多对多关系,例如,我会得到一些巨大的EF错误。这就是为什么我需要手动设置我的EntityObject的字段,这些字段是从数据库中获得的,并且具有可行的值。如下所示:
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
{
var userToUpdate = usersRepository.Get(user.UserId);
userToUpdate.Field1 = user.Field1;
...
// save
}
...
}
其中User是具有验证类的EntityObject。
因此,如果我使用平面viewmodels从窗体获取值和AutoMapper将值设置为我的实体对象将它是处理更新最正确的方式,或者它可以被自动化更多?
以及验证。如果我使用ef对象,我会在一个地方添加属性,并且验证每次都会在不同的地方发生。但如果我使用不同的viewmodels我将不得不重复验证逻辑? – donRumatta
我复制了ViewModel类的注释。这样客户端/服务器/编程操作都得到验证。 – Prafulla