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