Mercurial > pub > bltoolkit
comparison Source/Data/Linq/DataContextTransaction.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Data; | |
3 | |
4 using JetBrains.Annotations; | |
5 | |
6 namespace BLToolkit.Data.Linq | |
7 { | |
8 public class DataContextTransaction : IDisposable | |
9 { | |
10 public DataContextTransaction([NotNull] DataContext dataContext) | |
11 { | |
12 if (dataContext == null) throw new ArgumentNullException("dataContext"); | |
13 | |
14 DataContext = dataContext; | |
15 } | |
16 | |
17 public DataContext DataContext { get; set; } | |
18 | |
19 int _transactionCounter; | |
20 | |
21 public void BeginTransaction() | |
22 { | |
23 var db = DataContext.GetDBManager(); | |
24 | |
25 db.BeginTransaction(); | |
26 | |
27 if (_transactionCounter == 0) | |
28 DataContext.LockDbManagerCounter++; | |
29 | |
30 _transactionCounter++; | |
31 } | |
32 | |
33 public void BeginTransaction(IsolationLevel level) | |
34 { | |
35 var db = DataContext.GetDBManager(); | |
36 | |
37 db.BeginTransaction(level); | |
38 | |
39 if (_transactionCounter == 0) | |
40 DataContext.LockDbManagerCounter++; | |
41 | |
42 _transactionCounter++; | |
43 } | |
44 | |
45 public void CommitTransaction() | |
46 { | |
47 if (_transactionCounter > 0) | |
48 { | |
49 var db = DataContext.GetDBManager(); | |
50 | |
51 db.CommitTransaction(); | |
52 | |
53 _transactionCounter--; | |
54 | |
55 if (_transactionCounter == 0) | |
56 { | |
57 DataContext.LockDbManagerCounter--; | |
58 DataContext.ReleaseQuery(); | |
59 } | |
60 } | |
61 } | |
62 | |
63 public void RollbackTransaction() | |
64 { | |
65 if (_transactionCounter > 0) | |
66 { | |
67 var db = DataContext.GetDBManager(); | |
68 | |
69 db.RollbackTransaction(); | |
70 | |
71 _transactionCounter--; | |
72 | |
73 if (_transactionCounter == 0) | |
74 { | |
75 DataContext.LockDbManagerCounter--; | |
76 DataContext.ReleaseQuery(); | |
77 } | |
78 } | |
79 } | |
80 | |
81 public void Dispose() | |
82 { | |
83 if (_transactionCounter > 0) | |
84 { | |
85 var db = DataContext.GetDBManager(); | |
86 | |
87 db.RollbackTransaction(); | |
88 | |
89 _transactionCounter = 0; | |
90 | |
91 DataContext.LockDbManagerCounter--; | |
92 } | |
93 } | |
94 } | |
95 } |