LLBLGen:我如何软删除条目

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

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

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

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

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

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

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

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