给出以下代码:
[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)
答案 0 :(得分:3)
问题是您的上下文不了解o
。执行以下行时:
query = o;
查询变量现在指向您的上下文不知道的对象。请记住,上下文跟踪对象,而不是指针。您需要找到一种方法来确保上下文跟踪您的对象。
如果您使用的实体框架应该类似于db2.Attach(o)
。
另一种可能的解决方案是复制所有值。