Я хочу сделать простую форму редактирования для нашего приложения отслеживания проблем. Для простоты действие HttpGet Edit выглядит примерно так:
// Issues/Edit/12
public ActionResult Edit(int id)
{
var thisIssue = edmx.Issues.First(i => i.IssueID == id);
return View(thisIssue);
}
, а затем действие HttpPost выглядит примерно так:
[HttpPost]
public ActionResult Edit(int id, FormCollection form)
{
// this is the dumb part where I grab the object before I update it.
// concurrency is sidestepped here.
var thisIssue = edmx.Issues.Single(c => c.IssueID == id);
TryUpdateModel(thisIssue);
if (ModelState.IsValid)
{
edmx.SaveChanges();
TempData["message"] = string.Format("Issue #{0} successfully modified.", id);
return RedirectToAction("Index");
}
return View(thisIssue);
}
Который работает чудесно. Однако проверка параллелизма не работает, потому что в Посте я повторно получаю текущую сущность прямо перед тем, как пытаюсь обновить ее. Тем не менее, с EF я не знаю, как использовать причудливость SaveChanges()
, но прикрепить мой thisIssue
к контексту. Я пытался позвонить edmx.Issues.Attach(thisIssue)
, но я получил
The object cannot be attached because it is already in the object context. An object can only be reattached when it is in an unchanged state.
Как мне справиться с параллелизмом в MVC с EF и / или как правильно Attach
отредактировать мой отредактированный объект в контексте?
Заранее спасибо