【发布时间】:2010-09-13 02:03:57
【问题描述】:
我继承了一个使用 LLBLGen Pro 作为 DB 层的项目。 DB 模型要求在删除条目时有一个标志(DeletedDate 设置为当前时间)。上一位程序员忽略了这一要求,并在整个应用程序中使用了定期删除。
有没有办法将代码生成器设置为自动执行此操作,还是我必须为需要它的实体重载每个删除运算符?
【问题讨论】:
标签: c# llblgenpro
我继承了一个使用 LLBLGen Pro 作为 DB 层的项目。 DB 模型要求在删除条目时有一个标志(DeletedDate 设置为当前时间)。上一位程序员忽略了这一要求,并在整个应用程序中使用了定期删除。
有没有办法将代码生成器设置为自动执行此操作,还是我必须为需要它的实体重载每个删除运算符?
【问题讨论】:
标签: c# llblgenpro
我在 SQL Server 2005 中使用 INSTEAD OF 触发器对任何软删除表进行删除来实现这一点。触发器设置删除标志并执行清理。这个解决方案的美妙之处在于它可以正确处理访问数据库的任何系统发出的删除。 INSTEAD OF 在 SQL Server 中相对较新,我知道有一个 Oracle 等价物。
这个解决方案还可以很好地与我们的 O/R 映射器配合使用——我创建了过滤掉软删除记录并映射这些记录的视图。这些视图也用于所有报告。
【讨论】:
您可以在 LLBLGen 中创建自定义任务,以便在您生成实体时覆盖这些任务。在网站上查看他们的模板工作室和模板示例。
【讨论】:
这取决于您使用的是自助服务还是适配器。如果是 SS,您将需要修改模板,以便它为您设置标志而不是删除实体。
如果是适配器,您可以从 DataAccessAdapter 继承并覆盖删除方法来为您设置标志而不是删除实体。
这通常是一个糟糕的性能解决方案,因为每个查询都需要过滤掉“已删除”实体 - 并且因为“已删除”列上的选择性不会很高(所有“未删除”记录都是空的- 我猜这将是他们中的大多数)索引它不会给你带来很多好处 - 你最终会得到很多表扫描。
【讨论】: