【发布时间】:2009-05-03 14:18:16
【问题描述】:
这是 LinqToSQL 中的另一个问题,我确信我一定错过了某个地方,因为 O/R 设计器的行为让我非常困惑......
我的 LinqToSQL 表有一个基类,我称之为LinqedTable。我已经成功地使用反射来获取后代类的所有属性并执行其他标准操作。
现在我想对我的表进行一些自动审计,以便每当插入或删除LinqedTable 记录或字段值更改时,我都会将记录插入审计表,详细说明更改类型,字段名称,以及保存前和保存后的值。
我想我可以使用PropertyChanging 事件来做到这一点,在保存之前跟踪所有更改的属性,然后在每次SubmitChanges() 调用之后清除更改集合。但是 - 出于某种奇怪的原因,O/R 设计器生成的代码没有在 PropertyChanging 事件中为您提供属性名称 - 它发送一个空字符串! (WHY?!)它确实在 PropertyChanged 事件中发送了属性名称,但是对于我来说获取原始值已经太晚了。
我想使用 OnLoaded() 部分方法来获取所有属性的所有原始值 - 但根据定义,这是私有的,我需要在基类中访问该方法。即使我使用反射来获取该方法,这也意味着我必须为我的每个表实现另一半部分方法,这有点违背了继承的目的!
我也无法在 DataContext 中找到任何合适的方法来使用或覆盖。
那么,您会建议什么来使此审核功能正常工作?
【问题讨论】:
标签: c# .net linq linq-to-sql or-designer