2012-01-06 12 views
3

私は現在、我々は、すべての変更されたデータのアーカイブおよびトレースする必要があるプロジェクトに取り組んでいます。データの以前の値と新しい値を保持する方法は?

変更降伏、私たちはデータを変更したまま論文情報

  • にありますか?
  • いつですか?
  • これは私がこの質問をしている理由です:前のデータは と新しいデータの値はです。すぐに

、私はすべてのデータのすべての変更を追跡する必要があります。

: 名前フィールドに「Morgan」という値があります。私は、この値を変更する場合

は、私は私が持っている

... XXX年1月6日には、値が「ロバート」「モーガン」から変更したユーザーに言うことができなければなりません大量のデータがこの動作に関係しているため、これを行うきれいで汎用的な方法を見つけます。

私のプログラムは、C#(。NET 4)であり、我々は、オブジェクトのマッピングは、SQL Server 2008 R2とNHibernateはを使用しています。

は、あなたにそのようなことを行う方法についての任意のアイデア、経験や解決策を実行してください?

答えて

1

私はあなたが利用可能な新しいデータ対古いを持つようにしたいどの時点で約少し混乱しています。しかし、これは、次の質問のようにデータベース・トリガー内で実行することができます。

trigger-insert-old-values-values-that-was-updated

+0

おかげで多くを得ることができ

enversConf.Audit<Person>(); 

のようなその簡単。ユーザーは、すべてのデータの以前の変更をすべて表示する必要があります。私はさまざまな解決策を見つけようとします。トリガーはおそらく最善の方法ですが、私は他のDevからのフィードバックを得たいと思っていました – Morgan

0

私はあなたと同じような状況にしてきました。

IDの列(変更するオブジェクトが複数ある場合)、アクションインジケータ(「ユーザーがfirstnameを変更した可能性があります」、intとして)、ActivityEntryをデータベースに保存します。日付フィールド、userId、最も重要なパラメータフィールドです。

パラメータフィールドとアクションインジケータの値を組み合わせると、 "{0}" {1}のファーストネームが{2}から{3} "に変更されました。 "ジョン;ジョー"。

私はそれは、データベース内のこれらの完全に緩く型付けされた値を保存ちょっと間違って感じているけど、私はそれが各テーブルのコピーを持たずに、周りの唯一の方法だと信じています。

+0

ありがとうございました。新しいActivityEntryがデータベースによってトリガーされるか、別のソリューションを実装してデータベースエントリを作成しましたか? – Morgan

+0

私の解決策(完璧ではなかった)では、ユーザが何かをやったたびに呼び出す方法(単に 'string'パラメータとアクションインジケータの' params'を取る)がありました。私はあなたがユーザーが作った正確な行動を把握できれば、これを自動化することが可能だと思います。 – jhovgaard

1

NHibernateのEnversそのあなたが何をしたい:)

あなたはNHibernateはを使用する必要があります3.2以上(3.2は、現在のリリースです)。

あなたが情報herehere

+0

ご回答いただきありがとうございます。私はできるだけ早くそれを試してみよう! – Morgan

+0

ハム、私はあなたが私に与えたリソースを見て、それは有望だと思います! – Morgan

関連する問題