实施数据库修订的最佳实践是什么?

时间:2011-03-03 14:55:13

标签: database entity-framework design-patterns

实施数据库修订的最佳做法是什么?

假设我有一个名为Test的表,另一个用于修订的表名为Test_Rev。

我认为我会将Test的记录更改跟踪到Test_Rev表中。

在保存之前,我获取已更改的实体,以便我可以修改需要修改的表。

我使用Producer-Consumer模式创建了一个单独的线程,然后将需要修改的实体传递给该线程。

使用访问者模式,我扩展了我的类的行为,以便我可以修改它们。

效果很好,但我需要知道最佳做法。

一位朋友告诉我将修改作为我需要修改的表格的触发器。

顺便说一句,我正在使用VS 2010,SQL Server 2005,实体框架

2 个答案:

答案 0 :(得分:1)

这取决于你是否对数据库中的逻辑感到满意。如果您没有问题,请使用数据库触发器。如果要在应用程序中保留逻辑,请在派生SaveChanges中覆盖ObjectContext并在执行base.SaveChanges之前运行修订(添加修订实体)。唯一的问题可能是使用自动生成的密钥“审核”新添加的实体 - 只有在调用base.SaveChanges后才能知道密钥。因此,在这种情况下,您必须在保存更改后审核添加的实体,然后再次调用base.SaveChanges

我认为没有任何理由为此设置单独的线程 - 而且ObjectContext不是线程安全的。

答案 1 :(得分:1)

在数据库中,这称为审计,通常通过触发器完成。在任何情况下都不要在应用程序中执行此操作,否则您将错过更改,唯一合适的位置是在数据库中。