2012-02-28 1 views
3

私はすべての変更をログに記録したいと思いますがこれまでのところ、私は(SaveChangesメソッドをオーバーライドすることによって、すべてのエンティティその人自身を追跡することができます..私はこれまで適切な解決策を見つけることができなかった、4 しかしEntity Frameworkのを使用してEntity Frameworkでは適切な変更ログが不可能ですか?

をSQL Azureのデータベースを作りましたObjectStateManagerを使用して、追加、変更、削除されたすべてのエンティティを取得します。これは正常に動作します。残念ながら、私はRelationshipEntriesから有用な情報を取得することはできないようです。私たちのデータベースモデルでは、新しい/変更/削除されたエントリもログに記録する多対多の関係があります。

すべての変更をAzureストレージに保存して、ユーザーが行った変更に従い、エンティティの以前のバージョンにロールバックすることができます。

これを達成する良い方法はありますか?

編集: 私たちは、すべてのビジネスロジックを含むRESTful WebServiceをホストしており、そのデータをAzure SQLデータベースに格納しています。クライアントはWebServiceを持つユーザーとして認証されなければならず、ユーザーがデータを変更した情報を保存する必要があります。

+0

SQL Azureでデータの変更がキャプチャされますか? – TGnat

+0

@TGnat [このページ](http://msdn.microsoft.com/en-us/library/windowsazure/ff394115.aspx)によれば、それはありません。 – user1165068

+0

@ user1165068:あなたは確かにOSMから新しい/変更された関係を得ることができます。 –

答えて

2

tracing providerで行うことができます。

+0

残念ながら、トレースプロバイダは、私たちの作業に不可欠なHibernatingRhinos Profilerとは連携しません。それは_EFProviderWrapperToolkit.DbConnectionWrapperに_HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection_をキャストすることはできません_ ... – user1165068

+0

[関連するStackOverflowの質問](http://stackoverflow.com/questions/4846743/how-to-get-efprof-and- – user1165068

0

このためにデータベーストリガーを使用することを検討してください。表の値が変更されると、行を別のアーカイブ表にコピーします。それは私のためにかなりうまくいった。

+0

このメソッドを使用してデータベースを変更したWHOの情報をどのように取得できますか?私はシナリオによって私の最初のポストをよりよく伸ばす。 :) – user1165068

+0

@ user1165068:良い質問です。私は通常、このように追跡したいテーブルに 'ActorId'プロパティを含めます。これは、データアクセスコードを持っていなければならないということです。消費者が更新時に現在の人物のIDを提供する必要があります。完璧な解決策ではありません。これを忘れると、最初にアイテムを作成した同じ人が行った変更が記録されることになります。 – StriplingWarrior

3

この目的のために書いたEntity FrameworkロギングライブラリFrameLogを参照してください。オープンソースで、商用利用も含まれています。

ライブラリを使用したくない場合でも、コードを見ればロギング関係を処理する方法の1つを見ることができます。すべての関係の多重度を扱います。

具体的には、プライベートメソッドlogRelationshipChangeとlogForeignKeyChangeのコードはthe ChangeLogger classです。

+1

私はFramelogを保証することができます。私の現在のプロジェクトでそれを使用し、それがスズについて言うことをします。 –

関連する問題