如何跟踪数据库的更改?

时间:2012-06-29 14:14:28

标签: c# sql-server asp.net-mvc-3 entity-framework logging

我正在创建一个会计部门将使用的网站。跟踪不同项目的预算支出。

我正在使用SQL Server 2008 R2作为数据库,使用ASP.net C#MVC 3作为网站。

我的老板要求我做的是每次任何用户更新或创建项目时,我们都需要将该更改记录到名为Mapping_log的新表中。它应记录正在保存或创建的整个Mapping行,以及用户和日期戳记。注释字段现在是必填字段,注释应保存到Mapping_log

现在编辑PA时,Notes字段将始终为空,在其下方,它应该有一个按日期组织的旧笔记列表。我一直在研究使用Nlog和Log4net,但我找不到像我这样的情况的任何好的教程。看起来这些模块主要用于错误记录,虽然重要的不是我现在尝试做的。

我需要一些方向......有没有人有任何建议或教程我可以用来了解如何实现一个过程来跟踪网站用户对数据所做的更改。

感谢您的帮助/建议!

2 个答案:

答案 0 :(得分:3)

您可以考虑SQL Server 2008引入的两个新功能:Change TrackingChange Data Capture

您可以使用它并避免使用自定义Mapping_log表。

但是如果你需要应用更复杂的业务规则,也许最好在应用层实现这一目标,而不是纯粹在数据库中。

问候。

答案 1 :(得分:1)

我只想创建两个触发器 - 一个用于更新,一个用于插入。

这些触发器看起来像这样 - 假设您还想在Mapping_Log表中记录操作(插入与更新):

CREATE TRIGGER trg_Mapping_Insert
ON dbo.Mapping
AFTER INSERT
AS
   INSERT INTO dbo.Mapping_Log(col1, col2, ..., colN, User, DateStamp, Operation)
      SELECT 
         col1, col2, ..., colN, SUSER_NAME(), GETDATE(), 'INSERT'
      FROM
         Inserted 

你的UPDATE触发器非常相似 - 只需将“insert”替换为“update”,无论它出现在哪里

这是为您“幕后”完成的 - 一旦到位,您不必再做任何事情就可以将这些操作“记录”到您的Mapping_Log表格。