Преимущества 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
Я нашел этот шаблон так полезно, я построил свою собственную подобную структуру для отличаясь процессами. – cjk