Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 您如何为您的对象(编程)实现审计跟踪?_C#_Logging_Object_Audit - Fatal编程技术网

C# 您如何为您的对象(编程)实现审计跟踪?

C# 您如何为您的对象(编程)实现审计跟踪?,c#,logging,object,audit,C#,Logging,Object,Audit,我需要在我的对象上实现添加/编辑/删除的审计跟踪,我正在使用ORM(XPO)定义我的对象等。我实现了一个在 节约 OnDeleting 我将更改存储在Audit AuditTrail(Mast Det)表中,用于字段更改。使用一些方法调用服务 如何在OOP代码中实现审计跟踪?请分享你的见解?有什么图案等吗?最佳实践等?另一件事是如何在运行单元测试时禁用审计,因为我不需要审计它们,但因为基本对象有代码 对对象的更改(编辑/添加/删除)以及需要审核的字段更改我知道这并不能回答您的问题,但作为记录,我

我需要在我的对象上实现添加/编辑/删除的审计跟踪,我正在使用ORM(XPO)定义我的对象等。我实现了一个在

  • 节约
  • OnDeleting
  • 我将更改存储在Audit AuditTrail(Mast Det)表中,用于字段更改。使用一些方法调用服务

    如何在OOP代码中实现审计跟踪?请分享你的见解?有什么图案等吗?最佳实践等?另一件事是如何在运行单元测试时禁用审计,因为我不需要审计它们,但因为基本对象有代码


    对对象的更改(编辑/添加/删除)以及需要审核的字段更改

    我知道这并不能回答您的问题,但作为记录,我更愿意在数据库中处理这种类型的审核逻辑。

    如果可以的话,数据库触发器是首选方法

    但是,最近我不得不在客户端代码中这样做,我最终编写了一个类,该类在对象打开进行编辑时创建了对象的深度(值)副本,在保存时比较了两个对象(仅使用ToString()),并将任何更改写入审核表


    < P>编辑:我在每个属性中都有一个[Audio]属性,我想考虑审计并使用反射来找到它们,使该方法对被审计对象不具有特殊性。

    < P>我来自数据库侧的SW侧,如果您创建了一组DAOS(数据访问对象),用于与数据库的交互。然后,我将把审计功能插入DAO中需要跟踪的各个函数中

    数据库触发器解决方案也是可行的,这取决于您希望将功能放在数据库或代码中的哪个位置


    有很多ORM(对象关系映射)工具可以为您创建DAO层

    我不知道它是否能与您的ORM无缝匹配,但我使用了ERP应用程序的数据库设计,并真的推荐它。您可以自动从该体系结构中获取历史记录和审核,以及其他好处。

    我们已经使用AOP(aspectJ实现)实现了类似的解决方案。使用此方法可以捕获特定点并执行特定操作

    这可以在我们喜欢的时候插入和关闭

    如果你真的想在应用层这样做,我建议你这样做


    希望对您有所帮助。

    我在Hibernate(另一种ORM)中使用侦听器完成了这项工作。这样,审计代码就与您的代码分开了。

    我们有一个表,其中存储了所有审计跟踪条目。每个表上都有一个数据库触发器(它由一个存储过程放在那里,但这与这个答案无关)。更改值时,旧值将存储在审核跟踪中。我们的有点复杂,因为我们还有一个查找表,其中包含我们拥有的每个表的列表,另一个表包含每个表的每个字段。这允许我们根据审计跟踪中的条目所在的表,通过第一列中该表的ID来查找该条目。然后,我们还可以根据第二个表的ID准确地知道我们要查找的字段。这使我们不必存储表名和字段名的字符串。为了显示它,我们的网格在删除按钮旁边有一个“审计跟踪”按钮。这将打开一个带有该记录历史记录的弹出网格。我们使用剑道网格,但没有任何一个实现是必要的。弹出窗口是一个引导式弹出窗口。

    我对这个答案投了赞成票,但使用数据库触发器时需要注意的一件事是事务括号。有时,即使在发生错误并回滚事务时,您也希望审核事件。我正在处理多租户应用程序,其中所有租户记录都将存储在一个带有TenantId的数据库中。如果我使用PTA,我将在数据库中得到大量的行,尤其是更新:(你有任何示例或链接吗?