LLBLGen:如何软删除条目

时间:2020-03-06 14:43:08  来源:igfitidea点击:

我继承了一个在数据库层使用LLBLGen Pro的项目。数据库模型要求删除条目时将其标记(DeletedDate设置为当前时间)。最后一位程序员忽略了这一要求,并在整个应用程序中使用了常规删除操作。

有没有一种方法可以将代码生成器设置为自动执行此操作,或者我是否需要为需要它的实体重载每个删除运算符?

解决方案

我在SQL Server 2005中对任何软删除表在删除时使用INSTEAD OF触发器来实现此目的。触发器设置删除标志并执行清理。此解决方案的优点在于,它可以正确处理任何访问数据库的系统发出的删除操作。 INSTEAD OF在SQL Server中相对较新,我知道有一个Oracle等效项。

该解决方案还可以与我们的O / R映射器配合使用-我创建了可以过滤掉软删除的记录并对其进行映射的视图。该视图还用于所有报告。

我们可以在LLBLGen中创建自定义任务,该任务将在生成实体时为我们覆盖这些任务。在网站上查看其模板工作室和模板示例。

这取决于我们使用的是自助服务还是适配器。如果是SS,则需要修改模板,以便它为我们设置标志,而不是删除实体。

如果是适配器,则可以从DataAccessAdapter继承,并覆盖delete方法来为我们设置标志,而不是删除实体。

通常,这对于性能而言是一个糟糕的解决方案,尽管随后每个查询都需要过滤掉"已删除"的实体,并且由于"已删除"列上的选择性不会很高(我猜所有"未删除"记录都是空的这将是其中的大多数)索引并不能为我们带来很多好处,我们最终会进行大量表扫描。