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

C# 创建原子数据库和文件系统操作,c#,.net,sql-server,transactions,C#,.net,Sql Server,Transactions,我正在使用C#4.0和SQLServer2008R2开发一个ASP.NETMVC3应用程序。 我有一个场景: 将多个数据库行插入到SQL Server数据库中 根据其中一行的内容构建的xml文件将写入文件系统 当前,数据库操作包装在TransactionScope中,文件系统写入是调用TransactionScope.Complete()之前的最后一个操作 我正在尝试将文件系统写入与数据库插入作为单个原子操作结合起来 在阅读了一篇文章之后,我尝试使用事务性NTFS(TxF),它似乎工作正常。然而

我正在使用C#4.0和SQLServer2008R2开发一个ASP.NETMVC3应用程序。 我有一个场景:

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

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

    在阅读了一篇文章之后,我尝试使用事务性NTFS(TxF),它似乎工作正常。然而,在我工作的团队中,由于缺乏证据和TxF的经验,有些人不愿意使用这种方法


    还有什么其他合适的方法/模式可用于使组合数据库和文件系统更改原子化?

    您使用的是SQL Server 2008。您可以使用。
    这与数据库更改一起包装在事务中。

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

    1) 数据库被视为文件系统的主数据库。
    2) 临时文件夹用作TransactionScope中的文件写入目标。
    3) 单独的计划进程将检查暂存文件夹中是否有任何文件。
    4) 如果找到任何文件,则检查数据库是否与此文件一致。
    5) 如果数据库包含此文件的记录,则会将其移动到最终位置,事务即完成。
    6) 如果数据库不包含文件的记录,则会将其移出暂存文件夹并隔离,以便检查和/或删除


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

    谢谢您的建议。文件写入后,需要由第三方应用程序处理并移动到其他文件夹。当使用FileStream存储时,这可能吗?@TonE不,它是由SQL Server处理的文件存储,它的存储位置也由SQL Server处理。你不能把它移到别处。这里的快速扫描表明,可以使用Win32 file API读取文件内容,然后将其写入另一个位置,但这并不能改善我目前的状况。