2

mvc 4 使用 sql server 2008,代码优先,ef5

我有一个与视图关联的 ViewModel。

作为起点,我正在修改 VS 创建的脚手架。

我可以很好地填写表格。

当用户点击保存时 - 这是脚手架中的代码:

 [HttpPost]
 public ActionResult Edit(Place place)
 {
 if (ModelState.IsValid)
    {
       db.Entry(place).State = EntityState.Modified;
       db.SaveChanges();
       return RedirectToAction("Index");
    }
 return View(place);

地方是一个模型。我需要将视图模型(包括位置)传回给它。

如何使用 EF 将视图模型保存在数据库中?我必须先将其拆分为模型吗?

当我尝试出现此错误时:

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

当我调试时,似乎PlaceID(来自模型)从传递回控制器httpPost Edit控制器的模型中丢失 - 也许这就是错误的根源?

是否有任何在线最佳实践示例 - 我找不到任何东西。

谢谢。

4

2 回答 2

6

如何使用 EF 将视图模型保存在数据库中?

您不会将视图模型保存在数据库中。他们的角色是不被坚持的。视图模型用于定义视图使用的逻辑。在您的控制器操作中,您可以将视图模型映射回您的域模型,该域模型将使用您选择的数据访问技术进行持久化。您可以使用AutoMapper在视图模型和域模型之间进行映射。

当我调试时,似乎PlaceID(来自模型)从传递回控制器httpPost Edit控制器的模型中丢失 - 也许这就是错误的根源?

是的,这就是可能的原因。如果要更新数据库中的某些记录,EF 需要知道使用 ID 的这条记录是哪条记录。

于 2013-06-05T06:11:10.277 回答
1

视图中缺少此内容:

@Html.HiddenFor(model => model.place.PlaceID)

这会密切关注模型的 ID

于 2013-06-05T06:59:49.570 回答