【发布时间】:2009-12-16 13:20:44
【问题描述】:
我会跟踪对对象所做的所有更改,以便用户可以查看和回滚到任何项目的任何先前版本在数据库中。
history 数据库表如下所示:
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 事件,但我还没有找到解决方案
有没有人解决过这个问题或知道解决这个问题的好方法?
【问题讨论】:
-
你能连接到由 Linq 自动生成到 sql-metal 设计器或 Sql-metal 的 INotifyPropertyChanged 和 INotifyPropertyChanging 接口并围绕此进行跟踪吗?
-
有什么理由不能使用数据库触发器?
标签: c# linq linq-to-sql change-tracking