gpt4 book ai didi

c# - Linq To SQL 和审核更改的字段

转载 作者:行者123 更新时间:2023-11-30 20:14:09 25 4
gpt4 key购买 nike

这是这些 LinqToSQL 问题中的另一个,我确定我一定在某个地方错过了船,因为 O/R Designer 的行为对我来说非常令人费解......

我有一个 LinqToSQL 表的基类,我称之为 LinqedTable。我已经成功地使用反射来获取子类的所有属性并执行其他标准操作。

现在我想对我的表进行一些自动审计,以便每当插入或删除 LinqedTable 记录,或者字段值更改时,我都会将一条记录插入审计表,详细说明更改类型、字段名称及其保存前和保存后的值。

我想我可以使用 PropertyChanging 事件来做到这一点,在保存之前跟踪所有更改的属性,然后在每次 SubmitChanges()< 之后清除更改集合 调用。但是 - 出于某些奇怪的原因,O/R 设计器生成的代码不会在 PropertyChanging 事件中为您提供属性名称 - 它会发送一个空字符串! (为什么?!)它确实PropertyChanged 事件中发送了属性名称,但这对我来说已经太晚了,无法获得原始值。

我想使用 OnLoaded() 部分方法获取所有属性的所有原始值 - 但根据定义这是私有(private)的,我需要在基类中访问该方法。即使我使用反射来获取该方法,这也意味着我必须为我的每个表实现部分方法的另一半,这有点违背了继承的目的!

我也无法在 DataContext 中找到任何合适的方法来使用或覆盖。

那么您会推荐什么来让这个审计功能正常工作?

最佳答案

您可以在 DataContext 上使用 GetChangeSet 来检索上下文中所有表上发生的更新、插入和删除的列表。您可以使用 ITable.GetOriginalEntityState 来检索已更改实体的原始值。但是,当您检索已删除或更新记录的原始值时,关联将不可用,因此如果您需要处理相关实体,您将不得不仅依赖该区域的外键值。您可以使用 ITable.GetModifiedMembers 来帮助仅检索已更改的值。

关于c# - Linq To SQL 和审核更改的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com