创建原子数据库和文件系统操作

时间:2013-04-18 12:13:21

标签: c# .net sql-server transactions

我正在使用C#4.0和SQL Server 2008 R2开发ASP.Net MVC 3应用程序。 我有一个场景:

  1. 将多个数据库行插入SQL Server数据库。
  2. 根据其中一行的内容构建的xml文件将写入文件系统。
  3. 目前,数据库操作包含在TransactionScope中,文件系统写入是调用TransactionScope.Complete()之前的最后一个操作。

    我正在尝试将文件系统写入与数据库插入组合为单个原子操作。

    阅读similar post之后我尝试使用Transactional NTFS(TxF),它似乎工作正常。然而,在我工作的团队中,由于缺乏TxF的证据和经验,因此有些人不愿意使用它。

    可以使用哪些其他不错的方法/模式来使组合的数据库和文件系统发生原子变化?

2 个答案:

答案 0 :(得分:2)

您正在使用SQL Server 2008.您可以使用FileStream storage。 这包含在事务中以及数据库更改。

答案 1 :(得分:1)

无法使用事务性NTFS或SQL文件流存储我最终开发了一种两阶段提交。

1)数据库被认为是文件系统的主人 2)暂存文件夹用作TransactionScope中的文件写入目标 3)单独的计划进程检查staging文件夹中的任何文件 4)如果发现任何检查,则数据库对此文件是一致的 5)如果数据库包含该文件的记录,则将其移至最终位置并完成交易 6)如果数据库不包含文件记录,则将其从暂存文件夹中移出并隔离在可以检查和/或删除的位置。

显然需要仔细考虑计划流程中的错误报告。