5

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

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

4

3 回答 3

4

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

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

于 2008-09-25T14:18:00.013 回答
2

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

于 2008-09-26T13:23:09.863 回答
0

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

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

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

于 2008-11-19T16:41:46.413 回答