Как реализовать транзакцию на уровне бизнес-логики - PullRequest
3 голосов
/ 17 января 2011

Я использую блок доступа к данным корпоративной библиотеки в моем приложении asp.net.Я хочу реализовать транзакцию из уровня бизнес-логики через несколько хранимых процедур.Entlib открывает новое соединение для доступа к базе данных.Приводит ли использование области действия транзакции к распределенной транзакции следующим образом?

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
    // calling necessary DAL methods
   scope.Complete();
}  

Существуют ли более эффективные способы реализации транзакции из BLL?

1 Ответ

0 голосов
/ 18 января 2011

Если вы говорите о SQL Server как о бэкэнде, это зависит от версии сервера.Вот хорошая статья: DO.NET и System.Transactions

Я цитирую:

TransactionScope достаточно умен, чтобы не создавать полностью распределенную транзакцию свсе его накладные расходы, если это не необходимо.Если ресурс, участвующий в транзакции, является энергозависимым, все останется в памяти, и координатор распределенных транзакций Microsoft (DTC) не будет задействован.Если ресурс является соединением с SQL Server 2005, DTC не будет задействован, и SQL Server 2005 будет обрабатывать транзакцию.Это эквивалентно открытию внутренней транзакции SQL.Если используется SQL Server 2000, он будет использовать полную транзакцию DTC.

...