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);
地方是模特。我需要将viewmodel(包括地点)传递给它。
如何使用EF将viewmodel保存在数据库中?我是否必须先将其拆分为模型?
当我尝试时,我收到此错误:
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控制器的模型中缺失 - 也许这是错误的来源?
有没有在线最佳实践的例子 - 我找不到任何东西。
感谢。
答案 0 :(得分:6)
如何使用EF将视图模型保存在数据库中?
您不会在数据库中保留视图模型。他们的角色不是坚持不懈的。视图模型用于定义视图使用的逻辑。您可以在控制器操作中将视图模型映射回您的域模型,该模型将使用您选择的数据访问技术进行持久化。您可以使用AutoMapper
在视图模型和域模型之间进行映射。
当我调试它时,似乎缺少PlaceID(来自模型) 传回控制器httpPost Edit的模型 控制器 - 也许这是错误的来源?
是的,这是可能的原因。如果要更新数据库中的某些记录,EF需要知道哪个是使用ID的记录。
答案 1 :(得分:1)
视图中缺少这个:
@ Html.HiddenFor(model => model.place.PlaceID)
这会密切关注模型的ID