给出以下代码:
[HttpPost]
public ActionResult Edit(int id, Table o)
{
try
{
var query = db2.Table.Single(i => i.RecordID == o.RecordID);
query = o;
db2.SubmitChanges();
return RedirectToAction("Index");
}
catch { return View(); }
}
记录没有更新。它返回没有任何错误,但没有执行所需的更改,这很奇怪,因为如果我这样做:
query.propertyToChange = 4;`
甚至:
query.propertyToChange = o.propertyToChange;
它已经工作了。和:
db2.insertonsubmit(o);
将只是给出一个错误,因为一个字段应该是唯一的(这没有任何意义,因为我正在更新一个现有的行和传递相同的键值),所以它肯定假设我试图添加一个新的具有相同的唯一键。
有人能指出我为什么不能适用于现有的行更改值?(我使用SQLite,如果它有区别)
问题是您的上下文不知道o
。当您执行以下行时:
query = o;
查询变量现在指向上下文不知道的对象。记住,上下文跟踪对象,而不是指针。你需要找到一种方法来确保上下文在跟踪你的对象。
如果你正在使用实体框架,应该是像db2.Attach(o)
。