我知道许多表审计方法。有些是基于触发器的,需要审计每个表上的触发器。有些有基于列数据类型的限制。如何使用 NLog 或 Log4Net 等日志框架。我希望我的日志(在表格中)回答问题“此时谁将此表格的这一列从 val0 更新为 val1?”
我还没有决定使用 OR 映射器。倾向于 NHibernate 或 EF。
提前致谢 !
我知道许多表审计方法。有些是基于触发器的,需要审计每个表上的触发器。有些有基于列数据类型的限制。如何使用 NLog 或 Log4Net 等日志框架。我希望我的日志(在表格中)回答问题“此时谁将此表格的这一列从 val0 更新为 val1?”
我还没有决定使用 OR 映射器。倾向于 NHibernate 或 EF。
提前致谢 !
如果您使用像DAO这样的模式(我在 Java 和 Hibernate 中成功使用它),您可以为数据库中的每个更改添加一个条目。如果您使用Spring.NET,您可以使用AOP将拦截器添加到访问数据库的 DAO 的方法中。
无论如何,您可能想要为 DAOs 包添加一个特殊的附加程序,因为它会非常冗长。
Victors 的回答是一流的,但我想补充一点,这可能很难,具体取决于您的列-> 对象映射的工作方式。
如果您将表列映射到具有不同名称的对象属性和字段,那么我认为您将尝试解析 sql 信息以确定更新了哪一列。例如,如果您更改了“Product.Price”的值并且实际上映射到名为“final_price”的列,那么您的日志记录将与数据库中发生的情况不完全匹配。
这也可能是错误的,但如果您通过 ORM 包处理断开连接的实体,我不确定是否可以使用更改跟踪信息。我隐约记得我读到的一个问题,即您列出的一个 ORM 正在更新每一列,因此当用户真正更新单个列时,似乎用户更改了表中的所有列。