我记录所有对对象进行的更改,以便用户可以查看并回滚到数据库中任何项目的任何先前版本。
历史数据库表如下:
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
目前,每当用户填写一个表单时,我记录这些更改,以便完整地了解对象的旧状态和新状态。
然而,现在我需要使这些历史数据日志从代码中可用。它需要在使用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 事件上,但我还没有找到解决方案。