Как реализовать сценарий транзации?

Добрый день. В разработке приложение для управления продажами.
На текущий момент имею следующую архитектуру:
DomainModel - объекты для получения данных из БД (Чеки, Операции, Товары, Склады)
DAL - шлюзы к БД (IChequeGateway, IOperationGateway, ISellerGateway и подобное для получения данных). Эти шлюзы используют IDatabaseGateway - обертка над Firebird.
BLL - команды (CreateCheque, GetAllCheque, GetAllSellers, GetAllCustoms и подобное)

Вопрос следующий: необходимо выполнить команду CreateCheque в рамках одной транзакции БД - создать чек, добавить его товары, добавить в операции списание товаров, запись в лог.
Очевидно, при этом можно либо обратиться к разным шлюзам - но тогда необходима зависимость от транзакции БД (что нарушает абстрагирование шлюза от конкретного источника данных)
Либо провести все обращения к разным таблицам в классе, реализующем IChequeGateway - но тогда мы работает не только с таблицей чеков.
Обращение к БД происходит внутри шлюзов через IDatabaseGateway (класс-обертка над FirebirdClient).

Возможно, немного сумбурно описал, но пока как умею.

Подскажите пожалуйста более-менее корректный выход из сложившейся ситуации. Такую многослойную архитектуру с БД реализую впервые (C#)
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
Вы не смотрели класс TransactionScope? https://msdn.microsoft.com/ru-ru/library/system.tr...(v=vs.110).aspx
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы