Вы можете использовать шаблон Единица работы для управления транзакциями. Основным преимуществом модели единиц работы является то, что вы можете хранить свою стратегию транзакций в одном месте или в нескольких местах, когда у вас есть несколько стратегий.
Самым простым интерфейсом рабочей единицы может быть:
public interface IUnitOfWork
{
void Start();
void Commit();
void RollBack();
}
Вы можете создавать различные реализации UnitOfWork для разных ORM, для хранимых процедур или для жестко запрограммированных SQL. Вы можете начать транзакцию в начале запроса. Транзакция может быть размещена в конце запроса. Перед утилизацией вы можете заключить коммит в блок try-catch с откатом в catch.
try
{
unitOfWork.Commit();
}
catch
{
unitOfWork.RollBack();
throw;
}
Существуют следующие стратегии запуска транзакций:
- За запрос: одна транзакция используется на весь запрос, в большинстве случаев это лучший способ.
- Несколько раз за запрос: транзакция для метода.
- За беседу: вы можете создать транзакцию на основе нескольких запросов процесса оформления корзины.
Вы можете управлять своей транзакцией с помощью:
- атрибуты
- application_begin и метод endrequest в global.asax
- HttpModule
При использовании StructureMap вы можете использовать гибридное кэширование как InstanceScope в конфигурации единицы работы. Вы можете добавить единицу работы в репозитории с помощью StructureMap.