LLBLGen:我如何软删除条目

时间:2008-09-25 12:53:19

标签: c# llblgenpro

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

有没有办法设置代码生成器自动执行此操作,还是必须为需要它的实体重载每个删除操作符?

3 个答案:

答案 0 :(得分:4)

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

这个解决方案也可以很好地与我们的O / R映射器一起使用 - 我创建的视图可以过滤掉软删除的记录并映射它们。这些视图也用于所有报告。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

虽然每个查询都需要过滤掉“已删除”的实体,并且因为“已删除”列上的选择性不会很高(所有“未删除”记录都为空),但它通常是一种糟糕的性能解决方案。 - 我猜这将是他们中的大多数)索引它并没有给你带来太大的好处 - 你最终会进行大量的表扫描。