1

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

  1. 几个数据库行被插入到 SQL Server 数据库中。
  2. 从这些行之一的内容构建的 xml 文件被写入文件系统。

目前,数据库操作包装在 TransactionScope 中,文件系统写入是调用 TransactionScope.Complete() 之前的最后一个操作。

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

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

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

4

2 回答 2

2

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

于 2013-04-18T12:33:56.450 回答
1

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

1) 数据库被认为是文件系统的主控。
2) 暂存文件夹用作 TransactionScope 中的文件写入目标。
3) 一个单独的计划进程检查暂存文件夹中的任何文件。
4) 如果它找到任何它检查数据库是 consitant 这个文件。
5) 如果数据库包含该文件的记录,则将其移动到最终位置并且事务完成。
6) 如果数据库不包含文件的记录,则将其移出暂存文件夹并隔离在可以检查和/或删除的地方。

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

于 2013-05-17T13:53:04.010 回答