我有以下EdiePOST操作方法:
[HttpPost]
public ActionResult Edit([Bind(Include = "Note,DoctorID,VisitID,StatusID,timestamp")] Visit visit) //[Bind(Include="Note,DoctorID,VisitID,StatusID")]
{
if ((visit.EditableByAssingedDoctor(User.Identity.Name)) || (visit.EditableByCreatedBy(User.Identity.Name)))
{
try
{
if (ModelState.IsValid)
{
int id = visit.VisitID;
var v = repository.GetVisit(id);
visit.CreatedBy = v.CreatedBy;
visit.Date = v.Date;
visit.PatientID = v.PatientID;
visit.VisitTypeID = v.VisitTypeID;
repository.UpdateVisit(visit);
repository.Save();
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
//code goes here
其中repository.UpdateVisit(visit);
为:-
public void UpdateVisit(Visit v)
{
entities.Entry(v).State = EntityState.Modified;
}
但是当我运行我的应用程序并试图编辑访问对象时,我得到了以下错误:-
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
关于repository.UpdateVisit(visit);
方法,那么出了什么问题呢?BR
发布于 2012-04-30 05:56:49
将具有相同键的两个对象附加到同一上下文:repository.GetVisit(id)
中的v
和repository.UpdateVisit(visit)
中的visit
。这会导致异常。
因为您已经从数据库加载了实体,所以只需更新它的属性,然后保存它。而不是使用...
repository.UpdateVisit(visit);
...use...
repository.UpdateAttachedVisit(v, visit);
...with:
public void UpdateAttachedVisit(Visit attachedVisit, Visit detachedVisit)
{
entities.Entry(attachedVisit).CurrentValues.SetValues(detachedVisit);
}
https://stackoverflow.com/questions/10375302
复制相似问题