ObjectStateManager をクリアしたいのでSaveChanges();
、DbContext を呼び出した後、次の行が結果を返さないようにします。
dbContext.ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);
動作は、ObjectStateManager 内のすべてのオブジェクト (Added、Modified) が State changed を取得するUnchanged
ように見えるため、コードはそれらすべてを返します。クリアする方法はありますか?
コンテキストを再利用し、変更されていない状態のエンティティに対していくつかのことを行うため、これが必要ですが、ObjectSateManager は変更されていないエンティティで成長し、成長するため (SaveChanges 後にすべてが変更されないため)、1 つのエンティティに対して同じ作業を繰り返します。以上。
編集:
デタッチ方法が機能しない理由:
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; }
}
これで、更新または挿入する必要のあるいくつかの都市を含む Nation Item を 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 内の Unchanged 状態になりました。(SaveChanges 呼び出しの後)
私はそれらをループし、状態を未変更に設定します。これにより、すべての都市がNation = null
とを持つことになりNation.Cities being empty
ます。