保留已删除实体的信息

时间:2014-12-01 11:06:28

标签: c# sql-server nhibernate

在我们的项目中,我们需要能够说出删除某个实体的人和时间。 经过一番调查后,我找到了下一个解决方案:

  1. 将IsDeleted和DeletedBy列添加到每个表并在删除之前设置它(使用NH的删除事件)。但是这个解决方案有一些缺点:我们有很多sql视图,它们只适用于未删除的数据。因此,要实现这一点,我们应该在每个Table上编写View,这将类似于过滤器。 (WHERE IsDeleted = 0)
  2. 在删除前将每个实体序列化为xml,并将其存储在具有下一个结构的单独表中:Id | XML | Deleted By
  3. 从您的观点来看,哪些解决方案更受欢迎,或者上面没有提到其他解决方案?

    P.S。应从查询中排除已删除的行(Nhibernate和SQL)。

1 个答案:

答案 0 :(得分:2)

我看到三个选项:

  1. 硬删除。这些行不存在。
  2. 软删除。如你所述。是的,你必须在任何地方坚持使用IsSoftDeleted支票。到处。到处。这是一种彻底的痛苦。

  3. 归档表。创建一个与现有表完全相同的表...并在事务中执行移动(到存档表)和删除(从原始表)。

  4. 我与#2和#3合作过。我更喜欢#3,因为你避免了其他条款。

    使用#2,您可能还必须找出允许1个非软删除行的约束(基于唯一约束),但也允许复制违反唯一约束的软删除行。是的,好时光。