我有一个NHibernate映射类,它保存绑定到磁盘上文件的二进制数据。业务逻辑非常简单:
我使用了IPostDeleteEventListener来处理这三种情况
唯一的问题是,如果事务由于某种原因在Session.Delete()
之后回滚,文件已被删除但记录保留在DB中,这会在应用程序尝试时导致FileNotFoundException(re )加载未删除的对象。
另外,但这不是一件大事,如果在插入后取消了事务,我会得到一个垃圾文件。
在提交交易时,如何才能执行这些文件系统操作 ?
[添加]可能......我说也许,我找到了一个解决方法。 ITransaction
接口公开了一个RegisterSynchronization
方法,该方法接受一个接口作为参数。可能是解决方法:仅在完成事务后存储/删除文件。我需要进一步研究,但似乎没有工程方法可以直接从NHibernate事件监听器子系统挂接提交/回滚。
答案 0 :(得分:1)
由于文件系统不是事务性的,并且没有暴露“post-commit”事件,所以最好在NH的事件系统外部(即在更高级别的层中)