想要在我的视图中摆脱ViewBag,所以我对viewmodels进行了一些研究。 我喜欢用它来演示的想法,这里没有问题。 但我没有意识到使用viewmodels进行更新的最佳方法是什么。
首先,为什么我不能将我的EF实体与[MetadataType(typeof(User_Validation))]一起使用?
public ActionResult Edit(User user)
{
...
}
其中User是EntityObject。
然后,如果我使用viewmodels还有另一个问题:here人们认为应该使用嵌套的视图模型,但here是另一种观点(“它们不是围绕域模型的包装器” , 他说)。谁是对的?
另外,在POST之后更新操作对象的最佳方法是什么(不使用tryupdatemodel,因为here而且不仅仅是人们反对这种方法)。我试过使用ApplyCurrentValues但是如果有一些复杂的更新逻辑与多对多关系,例如,我得到一些巨大的EF错误。这就是为什么我需要手动设置我从DB获取的EntityObject的字段,其中包含的值将起作用。像这样的Smth:
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
{
var userToUpdate = usersRepository.Get(user.UserId);
userToUpdate.Field1 = user.Field1;
...
// save
}
...
}
其中User是带有验证类的EntityObject。
所以,如果我使用平面视图模型从表单中获取值,而AutoMapper将值设置为我的entityobject,那么它是处理更新的最正确方法还是可以自动化更多?
答案 0 :(得分:1)
你在最后一段回答了自己。我在MVC3 EF Code First项目中使用了完全相同的方法。
以下是我遵循的做法: