2008-09-25 86 views
5

我已经继承了一个使用LLBLGen Pro作为数据库层的项目。数据库模型要求当一个条目被删除时,一个标志(DeletedDate被设置为当前时间)。最后一名程序员忽略了这一要求,并在整个应用程序中使用了定期删除。LLBLGen:如何软删除一个条目

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

回答

4

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

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

+1

非常酷的建议 - 它似乎是有用的,无论具体的ORM或其他DAL策略的选择。 – 2008-11-19 16:45:32

2

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

0

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

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

虽然每个查询都需要过滤出“已删除”实体,并且因为“已删除”列的选择性不会很高(所有“未删除”记录都是空 - 我猜这将是其中的大多数)索引它并没有给你带来很多好处 - 你最终会得到很多表扫描。