ADO.NET 2.0 рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде System.Transactions рдЕрд╕реЗрдВрдмрд▓реА, рдЬрд┐рд╕рдореЗрдВ TransactionScope рдХреНрд▓рд╛рд╕, рд▓реЗрди-рджреЗрди рдХреА рдЖрд╕рд╛рди рдФрд░ рдЖрд╕рд╛рди рдЙрдкрдпреЛрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдЬ рдХреЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рд▓реАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЕрдЪреНрдЫрд╛ рдЕрдореВрд░реНрддрддрд╛ рд╣реИред
рддреЛ, ADO.NET 2.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ TransactionScope рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
using (var transactionScope = new TransactionScope(TransactionScopeOption.Suppress, new TransactionOptions() { IsolationLevel = IsolationLevel.Serializable }) {
рдореИрдВрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦреЗрдВ (рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ)ред
IsolationLevel
рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛
рдЕрд▓рдЧрд╛рд╡ ред Enum IsolationLevel рдореЗрдВ 7 рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрд╡рдпрдВ рдХреЛ рдлрд╝реНрд▓рд░реНрдЯ рди рдХрд░реЗрдВ - рдЗрди рдорд╛рдиреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗрд╡рд▓ ADO.NET рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ DBMS рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдЙрдЪреНрдЪрддрдо рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдФрд░ рдореИрдВ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрд▓реЛрдЪрдирд╛ рднреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛
patsansky рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд╛рдзрд╛рди рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ рджреМрд░: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдпрд╛ рдЧрддрд┐рд░реЛрдз рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдирд░рдо рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ, рдЖрдк рдПрдХ рд▓реЗрдирджреЗрди рдХреЗ рджреМрд░рд╛рди рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред
TransactionScopeOption
Enum TransactionScopeOption рдореЗрдВ рддреАрди рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЖрд╡рд╢реНрдпрдХрддрд╛, рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ, рджрдмрд╛рдПрдВ, рдЬреЛ TransactionScope рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред TransactionScopeOption рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЛрдВ рдХреЗ рддрд╣рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ
msdn рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ:
- рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди) рдПрдХ рд▓реЗрдирджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдкрд░, рдпрд╛ рддреЛ рдореВрд▓ рд▓реЗрди-рджреЗрди рдХрд╛ рд▓реЗрдирджреЗрди TranscScope (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдПрдХ рдирдпрд╛ рд▓реЗрдирджреЗрди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рд╣рдореЗрд╢рд╛ рдПрдХ рдирдП рд▓реЗрдирджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рджрдорди рд▓реЗрдирджреЗрди рдХреЗ рдмрд╛рд╣рд░ рдмреНрд▓реЙрдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдФрд░ рджрдмрд╛рдПрдВ рдореЛрдб рдореЗрдВ, рдХреЛрдИ рднреА TransactionScope рд░реВрдЯ рд╣реИ, рдЬрдмрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЛрдб рдореЗрдВ, рдЖрдк рдиреЗрд╕реНрдЯреЗрдб TransactionScope рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рдирд╕реНрдХреЛрдк рдиреЗрддреНрд░рд╣реАрди рдХреНрд▓рд╛рд╕рд┐рдХ рдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдирджреЗрди (MySQL рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЛ рд╕реЗрд╡рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЭреВрдареА рд╕рд╛рджреГрд╢реНрдпрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ:
public void Method1() { using (var transactionScope1 = new TransactionScope(TransactionScopeOption.Requires)) { Method2(); transactionScope1.Complete(); } } public void Method2() { using (var transactionScope2 = new TransactionScope(TransactionScopeOption.Requires)) {
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрдердб 2 рдореЗрдВ рд╣рдордиреЗ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред Cope2.Complete, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд╕реНрдХреЛрдк 2 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдХреНрд▓рд╛рд╕рд┐рдХ рдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдирджреЗрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд░реВрдЯ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрдВрддрд░рд┐рдХ рд▓реЗрдирджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рджреЛрдиреЛрдВ TransactionScope рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЖрдВрддрд░рд┐рдХ рд▓реЗрдирджреЗрдиScope рдкреВрд░реНрдг рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓реЗрди-рджреЗрди рдХреЛ рд░реЛрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЬрдм рдЖрдк рд░реВрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ TransactionScope, рд░реЛрд▓рдмреИрдХ рд╣реЛрдЧрд╛ (рдХрдо / рд░реЛрд▓рдмреИрдХ рд▓реЗрди-рджреЗрди рд╣рдореЗрд╢рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд░реВрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ TransScope )ред рдФрд░ рдЕрдЧрд░ рдореВрд▓ TransactionScope рдореЗрдВ рдЖрдк рдкреВрд░реНрдг (Method1 рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд▓реЗрди-рджреЗрди рдкрд╣рд▓реЗ рд╣реА рд░реЛрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ TransactionAbortedException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреЗрд╕реНрдЯреЗрдб TransactionScope рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ TransactionScope рдХрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд▓реЗрдирджреЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рд╣реИ:
public void TransactionMethod(TransactionScopeOption.Requires) { using (var transactionScope = new TransactionScope(TransactionScopeOptions.Requires)) { ... transactionScope.Complete(); }
, рд╕рд╛рде рд╣реА рд╡рд┐рдзрд┐ рдЬреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреА рд╣реИ:
public void CallingMethod1() {
рдФрд░ рд╕рдм рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕реЗрд╡рд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рд▓реЗрдирджреЗрди рд╕реЗ TransactionMethod рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ:
public void CallingMethod1() {
рдФрд░ рдпрд╣рд╛рдВ TransSMethod рдХреЗ рднреАрддрд░ transactionScope.Complete () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд▓реЗрди-рджреЗрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реНрдХ, рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рд▓реЗрдирджреЗрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрджреНрдпрдкрд┐, рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╡рд░реНрдгрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд▓реЗрдирджреЗрди рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╕рдордп рдХреЛрдИ рдХрдорд┐рдЯрдореЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдУрд╡рд░рд▓реЗ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрдм рдпрд╣ рджреЛ рдЕрдиреНрдп TransactionScopeOption рдореВрд▓реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдФрд░ рджрдмрд╛рдПрдВред рдореБрдЭреЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрди рд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реЛред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рдХрд┐рдпрд╛, рдФрд░ рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордпред
рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдпрд╛ рд╕рдкреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХрд╛ рдореБрджреНрджрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдФрд░ рджрдмрд╛рдПрдВ рдореЛрдб рдореЗрдВ TransactionScope, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреБрд░рд╛рдиреА рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реБрдврд╝рдХрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдмрд╣рд╛рд▓ рд╣реЛрддреА рд╣реИ:
[Test] public void void IntegrationTest() { using (new TransactionScope()) {
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдореЛрдб рдореЗрдВ TransactionScope рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡реЗ TransactionScope рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╣реБрдХ рдХрд░ рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдб рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╛ рд╕рдорд░реНрдерди рдореЛрдб рдореЗрдВ TransactionScope рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╣рдо рдкрд░реАрдХреНрд╖рдг TransSScope рд╕реЗ рдЙрдирдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд▓реЗрди-рджреЗрди рдХреЗ рд╕рдордп (рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣) рдореЗрдВ рдмрдВрдзрд╛ рд╣реБрдЖ рддрд░реНрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рднреА рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ TransactionScope рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереНрд░реЗрдбрд╕реНрдЯреИрдЯрд┐рдХ рдЪрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред рдпрджрд┐ рдЖрдкрдХреЛ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗрди-рджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ
рдбрд┐рдкреЗрдВрдбреЗрдВрдЯрдЯреНрд░рд╛рдВрд╕рдХреНрд╢рди рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╢рд╛рдпрдж рдпрд╣реА рд╕рдм рд╣реИред TransactionScope рд╕реБрдВрджрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдкрдЯреА рд╣реИ - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ :)