Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 25346|Отговор: 2

[Източник] Използване на TransactionScope в C#

[Копирай линк]
Публикувано в 10.04.2017 г. 10:16:25 ч. | | | |
Обхват на транзакции

TransactionScope е клас в System.Transactions, който идва с .NET рамката. Ако TransactionScope бъде пуснат без да се извиква методът Complete (TransactionScope реализира интерфейса IDisposible, препоръчва се използването на block), тогава операцията ще се счита за неуспешна и ще върне изпълнението назад.
TransactionScope е полезен API, който управлява транзакциите ("about" означава, че бази данни, поддържащи TransactionScope, могат автоматично да управляват транзакции), а повечето основни бази данни поддържат този API, включително и MSSQL на Microsoft, разбира се.
Ако използвате база данни или някаква транзакционна система, която не поддържа TransactionScope, все още можете да използвате интерцептора, но ще трябва да модифицирате кода си, за да използвате подходящ API, който поддържа транзакции (например използване на BeginTransaction API, за да получите реализацията на IDbTransactions от доставчика на базата данни).



Горното е персонализирано изключение, което умишлено използвах, за да видя дали може да се върне нормално, а снимката по-долу е нормално изпълнение, без изключения.




Извикването на метода Complete на TransactionScope показва, че транзакцията е успешно изпълнена. Разбира се, ако транзакцията винаги се изпълнява, тогава тя не е необходима. Причината за транзакциите е да се реши проблемът с провала в множество операции, а ако има провал, той ще бъде върнат назад.
Защото . TransactionScope на .NET няма изрично обаждане за връщане назад, а най-близкият еквивалент е използването на метода Dispose. Ако TransactionScope бъде пуснат преди да бъде извикан методът Complete, тогава TransactionScope извършва връщане назад. Затова трябва да се добави Dispose call към лицето на интерцептора на транзакции, за да се извърши връщането назад.


Накрая, прикачете кода!


Приложен е изходният код:
Туристи, ако искате да видите скритото съдържание на този пост, моляОтговор






Предишен:Операторът CREATE DATABASE не е разрешен в транзакция с множество оператори
Следващ:Направете динамичните полета на Linq OrderBy
 Хазяин| Публикувано в 10.04.2017 г. 10:20:30 ч. |
Класът TransactionScope може да се използва вложено, и ако искате да го използвате вложено, трябва да зададете параметъра TransactionScopeOption в блока за вложена транзакция. Стандартният параметър е Required.

Когато TransactionScopeOption на вложения клас TransactionScope е Required, можете да видите следния резултат – техните транзакции имат същия ID. Освен това, истинският успех е само когато и двата TransactionScope са завършени.

Ако зададете TransactionScopeOption на RequiresNew, вложените транзакционни блокове и външните транзакционни блокове са независими и не се влияят един на друг.

TransactionScopeOption е настроен на Suppress, за да анулира транзакцията на текущия блок, което обикновено се използва рядко.
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com