データベースコンテキスト(DbContext)に加えられた変更を確認する方法を見つけようとしています。注:Windows 7、64ビットボックスで、Entity Framework 5と共にVisual Studio 2012を使用しています。
DbContextの代わりにObjectContextを使用していたときは、次のようなことができました。
public partial class MyObjectContext
{
public Boolean HasUnsavedChanges()
{
return (this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
DbContextを使用しているので、これを試みました。
public partial class MyDbContext
{
public ObjectContext ObjectContext()
{
return (this as IObjectContextAdapter).ObjectContext;
}
public Boolean HasUnsavedChanges()
{
return (this.ObjectContext().ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
私が抱えている問題は、コンテキストが変更されたという事実を知っていても、メソッド「HasUnsavedChanges()」が常に「false」を返すことです。私が間違っていることについて誰かが何か考えを持っていますか?
DbContext
のChangeTracker
を使用する必要があります。
public bool HasUnsavedChanges()
{
return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
|| e.State == EntityState.Modified
|| e.State == EntityState.Deleted);
}
Entity Framework 5を使用しているので、この回答は役に立たないでしょう。しかし、それは他の人を助けるかもしれません。
context.ChangeTracker.HasChanges()