【问题标题】:Automatically log changes made to records in database自动记录对数据库中记录所做的更改
【发布时间】:2011-07-25 03:53:24
【问题描述】:
我想知道实现这一点的最佳方法是什么。
基本上,我们的项目要求记录对数据库中记录所做的任何更改。我已经使用反射和泛型在 C# 中完成了它,但我 100% 确定我使用了最好的方法。
有没有办法从 SQL 数据库中执行此操作?
关键是我们项目的工作方式,ObjectContext 是断开连接的,所以我们不能使用内置的更改跟踪,必须自己与以前的日志项进行比较。
【问题讨论】:
标签:
c#
asp.net
sql
sql-server
database
【解决方案1】:
如果您使用的是 SQL Server 2008 或更高版本,则可以直接在数据库上实现 change tracking 或 change data capture。请注意,后者仅在企业版引擎中可用。每种方法都有优点和缺点。您必须自己查看每个解决方案,因为问题中没有足够的需求信息。
如果您使用的是 SQL Server 2005 或更低版本,您将不得不求助于基于触发器的解决方案,正如其他答案所建议的那样。
【解决方案3】:
根据您的数据模型的复杂性,您可以在相关表上设置更新/插入/删除触发器 - 这些触发器可以记录所需的任何内容(旧/新值、用户、时间戳等)...参见 @987654321 @
【解决方案5】:
对于您的项目需求,SQL 触发器是比当前 C# 反射更好的解决方案。 Becaz 触发器为数据库管理系统提供了一种在执行插入、更新或删除操作时主动控制、监视和管理一组表的方法。此外,数据库层本身完全满足了需求,因此托管为各种前端应用程序的单一解决方案。