我想清除 ObjectStateManager,以便在调用SaveChanges();
DbContext 后,以下行不返回任何结果:
dbContext.ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);
行为似乎是 ObjectStateManager 中的所有对象(已添加、已修改)都将 State 更改为Unchanged
,因此代码将全部返回它们。有没有办法清除它?
我需要这个,因为我正在重用上下文并为具有未更改状态的实体做一些事情,但是由于 ObjectSateManager 与未更改的实体一起增长和增长(因为它在 SaveChanges 之后将它们全部更改为未更改)它为一个实体做同样的工作超过。
编辑:
为什么分离方法对我不起作用:
假设您有 2 个类:
public class Nation
{
public string Name { get; set; }
public ICollection<City> Cities { get; set; }
}
public class City
{
public string Name { get; set; }
public Nation Nation { get; set; }
}
现在,我已将一些需要更新或插入的城市的国家项目传递给 SaveChanges。
让我们假设以下内容:
var canada = new Nation()
{
Name = "Canada",
}
canada.Cities = new City[]
{
new City(){ Name = "Ottawa", Nation = canada, },
new City(){ Name = "Edmonton", Nation = canada, },
new City(){ Name = "Victoria", Nation = canada, },
new City(){ Name = "Torronto", Nation = canada, }
},
}
现在,我的 ObjectStateManager 中所有这些对象都处于未更改状态。(在 SaveChanges 调用之后)
我然后遍历它们并将状态设置为不变,这导致每个城市都有Nation = null
and Nation.Cities being empty
。