我跟踪对对象所做的所有更改,以便用户可以查看和回滚到数据库中任何项目的任何先前版本。
历史数据库表如下所示:
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();
我可以想象我可以通过两种方式实现这一点:
- 覆盖 db.SubmitChanges()但问题是我如何访问正在等待更改的对象。
- 将我的日志记录方法附加到OnSubmitChanges事件,但我还没有找到解决方案
有没有人解决过这个问题或知道解决这个问题的好方法?