Как обеспечить потокобезопасность при использовании доступа к данным корпоративной библиотеки

#multithreading #thread-safety #enterprise-library #data-access-app-block

#многопоточность #потокобезопасность #enterprise-library #доступ к данным-приложение-блок

Вопрос:

У меня есть приложение, которое запускает несколько одновременных фоновых процессов для вставки данных в базу данных с использованием блока приложений доступа к данным корпоративной библиотеки. Каждый фоновый поток использует DatabaseFactory.CreateDatabase, передающий то же имя экземпляра базы данных. Ниже приведен фрагмент кода, который извлекает базу данных и командный объект:

 Microsoft.Practices.EnterpriseLibrary.Data.Database database = DatabaseFactory.CreateDatabase(this.DatabaseInstanceName);
DbCommand commandObj = database.GetSqlStringCommand(statement);
  

Я обнаружил, что это не потокобезопасно, и я получаю ошибки из-за того, что значения перепутались в потоках. Как я должен справиться с этим, чтобы убедиться, что это потокобезопасно?

заранее спасибо!

Ответ №1:

Я нашел свою проблему. Значения, которые перепутывались между потоками, были связаны не с объектами доступа к данным корпоративной библиотеки, а с другим объектом, который я использовал для хранения параметров. Я случайно сделал его глобальным вместо локального ресурса в каждом потоке.