2013-04-18 2 views
1

Я работаю над приложением ASP.Net MVC 3 с использованием C# 4.0 и SQL Server 2008 R2. У меня сценарий где:Создание атомной базы данных и работы файловой системы

  1. Несколько строк базы данных вставляются в базу данных SQL Server.
  2. XML-файл, созданный из содержимого одной из этих строк, записывается в файловую систему.

В настоящее время операции с базой данных завертываются в TransactionScope, а запись в файловой системе - это последняя операция перед вызовом TransactionScope.Complete().

Я пытаюсь объединить файловую систему с вставками базы данных в виде одной атомной операции.

После прочтения similar post Я попытался использовать Transactional NTFS (TxF) и, похоже, работает нормально. Однако в команде, с которой я работаю, есть некоторое нежелание использовать это из-за отсутствия доказательств и опыта работы с TxF.

Что такое другие достойные подходы/шаблоны, которые могут быть использованы для создания объединенной базы данных и файловой системы?

ответ

1

Невозможно использовать Транзакционные хранилища NTFS или SQL Filestream. Я закончил разработку двухэтапной фиксации.

1) База данных считается мастером по файловой системе.
2) В TransactionScope в качестве адресата записи файла используется промежуточная папка.
3) Отдельный запланированный процесс проверяет промежуточную папку для любых файлов.
4) Если он обнаружит какие-либо проверки, база данных будет соответствовать этому файлу.
5) Если база данных содержит запись для этого файла, она перемещается в конечное местоположение и транзакция завершается.
6) Если база данных не содержит записи файла, она перемещается из промежуточной папки и помещается на карантин там, где ее можно проверять и/или удалять.

Очевидно, что тщательное рассмотрение необходимо в отчетах об ошибках в запланированном процессе.

2

Вы используете SQL Server 2008. Вы можете использовать FileStream storage. Это завернуто в транзакцию вместе с изменениями базы данных.

+0

Спасибо за предложение. После того, как файл был записан, его необходимо обработать и перенести в другую папку сторонним приложением. Будет ли это возможным при использовании хранилища FileStream? – TonE

+0

@TonE Nope, его хранение файла, который обрабатывается SQL Server, и где он хранится, также обрабатывается SQL Server. Вы не можете переместить его в другом месте. НАСКОЛЬКО МНЕ ИЗВЕСТНО. – Maarten

+0

Быстрое сканирование здесь http://technet.microsoft.com/en-us/library/cc645940(v=sql.105).aspx предполагает, что возможно использование API-интерфейса Win32 для чтения содержимого файла, а затем записи их в другое место, но это не улучшает мою текущую ситуацию. – TonE