2009-05-12 2 views
1

У меня более 20 транзакций за один выстрел. Я хочу использовать эту область транзакций. Является ли это возможным? И если возможно, то в чем преимущество использования класса scope транзакции над простой транзакцией.Сделка транзакций в деталях с таким количеством транзакций и их преимуществом

Какова наилучшая практика использования области транзакций?

ответ

5

Преимущества TransactionScope являются:

  • вы не должны пройти сделку вокруг (ADO.NET должна привлекать автоматически)
    • , что означает, что вы можете даже использовать TransactionScope добавить транзакции с существующим кодом с закрытым кодом (т.е. изменений не требуется)
  • a TransactionScope может (через DTC) охватывать несколько ресурсов (т. е. множество данных асы, или базы данных и сервер MSMQ, и т.д.)

Но вы платите за это немного бит со скоростью. Операция на основе соединения немного быстрее (не так много), но может охватывать только один ресурс и должна быть привязана вручную ко всему вашему коду DAL. Однако, если вы разговариваете только с одним экземпляром SQL2005/SQL2008, тогда он может использовать «LTM» - это означает, что он не должен включать DTC (из которого исходит большая часть производительности), если это абсолютно необходимо. Поэтому многие операции TransactionScope могут завершить разговор только с базой данных.

Если вы хотите охватить 20 операций, то TransactionScope должен быть идеальным - это избавит вас от необходимости проводить транзакции вокруг и разрешать каждой операции управлять своим подключением локально - делая для очень многократно используемого кода. Действительно, TransactionScope могут быть вложены в пути вы ожидаете, так что вы можете иметь:

void Deposit(...) { /* uses TranScope to do a deposit */ } 
void Debit(...) { /* uses TranScope to do a debit */ } 
void Transfer(...) { /* uses a TranScope to span Debit/Deposit */ } 

Чтобы сделать это с помощью транзакций базы данных вам нужно пройти соединение и транзакции объекты для каждого метода, который быстро получает неудобно - особенно если вам нужно закодировать для работы с/без существующей открытой транзакции (много «if(tran==null)» и т. д.).

Для получения дополнительной информации см Transactions in .net

+0

Я нашел этот шаблон так полезно, я построил свою собственную подобную структуру для отличаясь процессами. – cjk