2011-12-31 6 views
5

ObjectContextの変更が実際にコミットされたときを検出する良い方法はありますか?エンティティフレームワーク4:成功した保存時のObjectContextイベント

SavingChangesがデータストアに行く前に発生しますが、これらの変更が実際にコミットされたかどうかを知る方法も必要です。事前 で

おかげジョン

更新:

私が持っているものは、コード最初DbContextです。これは、私が発見したDbContextの内部ObjectContext(IObjectContextAdapterにキャストするときにアクセス権を持つ)を使用する動的データに供給されます。 dbcontextのSaveChangesは呼び出されず、objectcontextのSaveChangesが代わりに使用されます。保存が完了した後(つまり、イベントSavedChanges)に通知するだけで、キャッシュを無効にできます。

+0

変更がコミットされていない場合。 –

+0

私はSaveChanges()を呼び出していません。 SaveChanges()の可能な呼び出し元がたくさんありますので、SaveChanges()の後に呼び出すことができるように、それらのすべて(もし可能であれば)に行って編集するのではなく、DbContextでcatchすることを望んでいました。 – John

+0

イベントSavingChangesに接続できませんか? http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx – rene

答えて

7

あり、これを処理するために、何のビルドでのイベントはありませんが、あなたはあなたの派生コンテキストでSaveChangesメソッドをオーバーライドして、あなたがbase.SaveChangesを呼び出した後、独自のコンテキストのタイプに固有のカスタムイベントを発生することができます。

+0

これはDbContextでは当てはまりますが、DynamicDataではObjectContext.SaveChanges()が呼び出されていますが、これにはコントロールがありません(したがって、質問のタイトルにObjectContextリクエストがあります)。 – John

+0

'ObjectContext'に' SaveChanges(SaveOptions) 'をオーバーライドすることもできますし、動的データはあなたの派生した' ObjectContext'を受け入れます。 –

+0

私はそれを調べます。 – John

0

私は答えていますが、解答が見つかりません。

私は私の理解(と私の場合)に応じて、この質問を言い換えてみましょう:私はのみの構成としてのObjectContextを受け入れる動的データを、使用しています

。あなたは、あなたのようなプロパティ「IObjectContextAdapater.ObjectContext」を渡す必要があります(コードファーストで移動するための方法である)DbContextを使用する場合は、次の

DefaultModel.RegisterContext(() => { return ((IObjectContextAdapter) new MyDbContext()).ObjectContext; }, new ContextConfiguration() { ScaffoldAllTables = true }); 

ここでの問題は、あなたが変更を保存すると、 MyDbContextのSaveChangesメソッドが呼び出されず、代わりにDynamic DataがMyDbContext.ObjectContext内のSaveChangesメソッドを呼び出します。 この場合、MyDbContextのSaveChangesをオーバーライドすることは無意味です。

ObjectContextプロパティのSaveChangesにアクセスして、カスタムコードを記述できるように動作を変更するにはどうすればよいですか?

しかし、いずれにせよ、私は正しい見つけソリューションはObjectContextをプロパティにSavingChangesイベントのイベントハンドラを追加して上記の質問に「ルネ」でコメントしていた、ここにリンクが再びです:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx

これがクリアされることを希望します。

関連する問題