EF 中 修改 有时会报错:
The ObjectStateManager cannot track multiple objects with the same key.
using System.Data.Objects;
using System.Data.Entity.Infrastructure;
1 var _dc = (IObjectContextAdapter)context; // MyContext context=new MyContext(); MyContext 继承 DbContext
2 var _oc = _dc.ObjectContext;
3
4 var key = _oc.CreateEntityKey("MyDbSets", entity); //entity 为修改的对象
//MyDbSets 为 MyContext 中 public DbSet<MyDbSet> MyDbSets { get; set; }
5 ObjectStateEntry ose;
6 if (_oc.ObjectStateManager.TryGetObjectStateEntry(key, out ose))
7 {
8 var _entity = (MyDbSet)ose.Entity;
9 context.Entry(_entity).State = EntityState.Detached;
// Detached状态,就是entity还没有attach到context(实际上是Attach到某个DbSet上)的状态
}
11 context.MyDbSets.Attach(entity);
12 context.Entry(entity).State = EntityState.Modified;
10
}