我正在使用C#4.0和SQL Server 2008 R2开发ASP.Net MVC 3应用程序。 我有一个场景:
目前,数据库操作包含在TransactionScope中,文件系统写入是调用TransactionScope.Complete()之前的最后一个操作。
我正在尝试将文件系统写入与数据库插入组合为单个原子操作。
阅读similar post之后我尝试使用Transactional NTFS(TxF),它似乎工作正常。然而,在我工作的团队中,由于缺乏TxF的证据和经验,因此有些人不愿意使用它。
可以使用哪些其他不错的方法/模式来使组合的数据库和文件系统发生原子变化?
答案 0 :(得分:2)
您正在使用SQL Server 2008.您可以使用FileStream storage。 这包含在事务中以及数据库更改。
答案 1 :(得分:1)
无法使用事务性NTFS或SQL文件流存储我最终开发了一种两阶段提交。
1)数据库被认为是文件系统的主人 2)暂存文件夹用作TransactionScope中的文件写入目标 3)单独的计划进程检查staging文件夹中的任何文件 4)如果发现任何检查,则数据库对此文件是一致的 5)如果数据库包含该文件的记录,则将其移至最终位置并完成交易 6)如果数据库不包含文件记录,则将其从暂存文件夹中移出并隔离在可以检查和/或删除的位置。
显然需要仔细考虑计划流程中的错误报告。