Совместное использование соединения и транзакции на уровне доступа к данным - PullRequest
2 голосов
/ 08 августа 2010

Я создаю Уровень доступа к данным для моего приложения asp.net. Я хотел бы иметь возможность совместно использовать соединение между различными классами для управления транзакциями, но я не знаю, как это сделать.

Пример:

У меня есть 2 класса, Order и OrderDetail.

Я назову свой класс Order DAL для вставки SQL нового заказа.

Внутри метода Insert я хочу вызвать мой класс OrderDetail для вставки деталей моего заказа, и я сделал бы это с тем же соединением и транзакцией.

Может кто-нибудь предложить мне какой-нибудь архитектурный дизайн для этого? Или, может быть, кто-то может предоставить какой-то ресурс в интернете?

Надеюсь, пример понятен, мой английский отстой!

Спасибо.

1 Ответ

3 голосов
/ 08 августа 2010

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

Лучший способ «поделиться» вашей транзакцией - использовать класс TransactionScope. Создается так называемая окружающая транзакция . Каждый SqlConnection, который вы открываете в рамках внешней транзакции, автоматически становится частью этой транзакции.

Вам больше не нужно использовать (или следует использовать) SqlConnection.BeginTransaction, если вы используете окружающие транзакции.

...