オブジェクトに加えられたすべての変更を追跡して、ユーザーがデータベース内の任意のアイテムの以前のバージョンを表示およびロールバックできるようにします。
履歴データベース テーブルは次のようになります。
Item | ItemId | Field | WhenChanged | OldValue | NewValue
customer | 6 | LastName | 2009-12-31 13:00:04 | Sanders | Sanders-Smith
customer | 5 | FirstName | 2009-12-31 12:11:14 | Jym | Jim
現在、ユーザーがフォームに入力するたびにこれらの変更を記録するので、オブジェクトの古い状態と新しい状態の完全な情報を取得できます。
ただし、この履歴データのログをcodeから利用できるようにする必要があります。LINQ-to-SQLを使用する場合は透過的に動作する必要があります。つまり、開発者は余分な作業を行う必要はありません。つまり、次のコードは履歴テーブルへの書き込みも発生させる必要があります。
using (var db = Datasource.GetContext())
{
var customers = from c in db.Customers
where c.Status == "waiting"
select c;
foreach(var customer in customers)
{
customer.Status = "finished";
}
}
db.SubmitChanges();
これを実現するには、次の2 つの方法があると想像できます。
- db.SubmitChanges() をオーバーライドしますが、問題は、変更を待っているオブジェクトにアクセスする方法です。
- ロギング メソッドをOnSubmitChangesイベントにアタッチしますが、これに対する解決策をまだ見つけることができませんでした
誰かがこの問題に取り組んだことがありますか、それを解決するための良いアプローチを知っていますか?