web-dev-qa-db-ja.com

Entity Framework 5-DbContextに変更はありますか?

データベースコンテキスト(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」を返すことです。私が間違っていることについて誰かが何か考えを持っていますか?

33

DbContextChangeTrackerを使用する必要があります。

 public bool HasUnsavedChanges()
 {
    return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
                                              || e.State == EntityState.Modified
                                              || e.State == EntityState.Deleted);
 }
43
Mark Oreta

Entity Framework 5を使用しているので、この回答は役に立たないでしょう。しかし、それは他の人を助けるかもしれません。

Entity Framework 6以降では、次のコード行を実行するだけで変更を確認できます。

context.ChangeTracker.HasChanges()
32
Emdadul Sawon