我在从表单POST收到LINQ实体后尝试将它附加到数据上下文中。但是,我得到的是以下异常:
An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.
我也试过附上原始行,如下所示:
dataContext.People.Attach(person, originalPerson);
在这种情况下,我得到以下异常:
Object reference not set to an instance of an object.
这是我控制器中的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Person person) {
var prevPerson = dataContext.People.Single(p => p.ID == id);
dataContext.People.Attach(person, prevPerson);
dataContext.SubmitChanges();
return Redirect("~/People/Index");
}
关于我在这里做错了什么的想法?如果需要,我可以发布实体代码。
答案 0 :(得分:16)
请尝试以下操作:
dataContext.People.Attach(person);
dataContext.Refresh(RefreshMode.KeepCurrentValues, person);
dataContext.SubmitChanges();
答案 1 :(得分:12)
在LinqToSQL设计器中将所有更新检查设置为从不,当您附加调用时,如下所示:
context.entity.Attach(entity, true);
或者,您也可以从数据库中获取实体并使用POSTed实体中的数据进行更改,然后将其作为更改提交。
答案 2 :(得分:0)
我通过将UpdateCheck=Never
设置为.Dbml文件中的属性并context.entity.Attach(entity, true);