【发布时间】:2011-12-11 19:26:07
【问题描述】:
我的控制器上有标准的 Create() Edit() 和 Delete() 方法,并且我正在使用 EF4 自跟踪实体。
回发编辑时,model.ChangeTracker.ChangeTracking = false 和 model.ChangeTracker.State = ObjectState.Added,尽管我在最初检索记录时确保已设置这些。
提交表单时,自跟踪实体是否没有保留 ChangeTracker 类?如果是这样,我该如何解决?
public virtual ActionResult Edit(int personId)
{
IContext context = ContextFactory.GetContext();
EntityRepo Repo = new EntityRepo(context);
Person d = Repo.Person.GetById(PersonId);
d.ChangeTracker.ChangeTrackingEnabled = true;
return View(d);
}
[HttpPost]
public virtual ActionResult Edit(int personId, Person item)
{
try
{
if (ModelState.IsValid)
{
IContext context = ContextFactory.GetContext();
EntityRepo Repo = new EntityRepo(context);
// the item is returning these properties that are wrong
//item.ChangeTracker.ChangeTrackingEnabled = false;
//item.ChangeTracker.State = ObjectState.Added;
Repo.Person.Update(item);
Repo.Person.SaveChanges();
return RedirectToAction("Index");
}
}
catch
{
}
return View();
}
【问题讨论】:
-
"自跟踪实体是否没有通过回发保持 ChangeTracker 类?"我无法想象他们为什么会这样。 MVC 中没有回发。更新 GET 完全独立于更新 POST。您需要一个不假定共享状态的设计。
-
我不是指 POSTBACK 我是指当表单提交时。
-
我遵循了在控制器中创建 Create/Edit/Delete 视图和方法的约定。
-
是的,ChangeTracker 显然没有保留在表单的 http 帖子上。
-
它不能被“持久化”,因为它们是两个不同的实例。没有什么可以持久化的。您的 GET 视图模型在页面提供后立即被垃圾收集,远在 POST 发生之前。
标签: asp.net-mvc-2 entity-framework-4