我希望删除驻留在数据库中的文档。 Document有一些位于文件系统中的附件。业务逻辑首先删除数据库中的所有内容,然后删除文件。但是,此过程通常是较大事务的一部分,并且当回滚发生时,文档将被还原但没有附件。怎么解决这个问题?
我看到两个解决方案:
也许我错过了一些更简单的解决方案。你能分享一下你对这个问题的看法吗? 感谢。
答案 0 :(得分:4)
答案 1 :(得分:1)
除非你缺少硬盘空间,否则我不会删除任何东西 - 无论是在文件系统上还是在数据库中;我只是创建一个针对数据库记录的状态标志,并将“已删除”作为新状态。
这是假设文件系统上对象的唯一路径是通过应用程序 - 如果你有人浏览文件存储,这可能不起作用。
我更喜欢通过状态标志来管理对象删除 - 它可以防止您描述的分布式事务处理方式,但它还允许您跟踪业务域的历史记录,这有助于追踪错误。
答案 2 :(得分:0)
普通文件系统不是事务性资源。将文件存储在数据库中以获得事务支持。请阅读Helge Klein的回答。此功能显然最终已添加到Windows中。
如果你使用的是SQL2008,我认为可以使用FileStream功能来处理数据库中的文件,但仍然可以通过路径将它们作为文件访问。也许这是一个升级路径,不需要立即重写整个应用程序。