【发布时间】:2011-12-13 10:05:42
【问题描述】:
想在我的视图中摆脱 ViewBag,所以我对视图模型进行了一些研究。 我喜欢用它来演示的想法,这里没有问题。 但我不知道使用视图模型进行更新的最佳方式是什么。
首先,为什么我不应该将我的 EF 实体与 [MetadataType(typeof(User_Validation))] 一起使用?
public ActionResult Edit(User user)
{
...
}
其中 User 是 EntityObject。
那么,如果我使用视图模型,还有另一个问题:here 人们认为应该使用嵌套视图模型,但 here 是另一种观点(“它们不是域模型的包装器”,他说) .谁是对的?
另外,在 POST 之后更新对象的最佳方法是什么(不使用 tryupdatemodel,因为here 不仅人们反对这种方法)。我尝试使用 ApplyCurrentValues,但如果存在一些复杂的多对多关系更新逻辑,例如,我会收到一些巨大的 EF 错误。这就是为什么我需要手动设置我从 DB 获得的 EntityObject 的字段,并使用能够起作用的值。像这样的:
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
{
var userToUpdate = usersRepository.Get(user.UserId);
userToUpdate.Field1 = user.Field1;
...
// save
}
...
}
其中 User 是具有验证类的 EntityObject。
所以,如果我使用平面视图模型从表单获取值并使用 AutoMapper 为我的实体对象设置值,这将是处理更新的最正确方法还是可以进一步自动化?
【问题讨论】:
标签: asp.net-mvc viewmodel automapper edit