2009-06-03 48 views
0

我知道很多表审核方法。有些是基于触发器的,并且要求每个表上的触发器进行审计。 SOme有基于列数据类型的限制。我如何使用像NLog或Log4Net这样的日志框架。我希望我的日志(在表中)回答问题“此时谁更新了此表中此列从val0到val1的这一列?”如何使用NLog/Log4Net自动执行数据库更改跟踪?

我还没有决定OR映射器。倾向于NHibernate或EF。

在此先感谢!

回答

2

如果您使用像DAO这样的模式(我在Hibernate中用Java成功使用它),您可以为数据库中的每个更改添加一个条目。如果使用Spring.NET,则可以使用AOP将拦截器添加到访问数据库的DAO的方法中。

无论如何,你可能想为DAOs包添加一个特殊的appender,因为它会非常冗长。

+0

倾向于Postsharp ..但AOP听起来很不错 – Perpetualcoder 2009-06-05 10:09:06

1

Victors的答案是一流的,但我想补充一点,这可能很难,这取决于你的列 - >对象映射如何工作。

如果您将表列映射到对象属性和具有不同名称的字段,那么我认为您会考虑尝试解析sql信息以确定哪个列已更新。例如,如果您更改了“Product.Price”的值并且实际映射到名为“final_price”的列,那么您的日志记录将不会完全匹配数据库中发生的情况。

此外这可能是错误的,但如果您通过ORM包与断开连接的实体一起工作,我不确定是否可以使用更改跟踪信息。我隐约记得一个问题,我读到了你列出的某个ORM在哪里更新每一列,所以当用户真的更新了一列时,用户改变了表中的所有列。