1
- using System . Collections ;
1
+ using System . Collections . Generic ;
2
+ using System . Linq ;
2
3
using System . Transactions ;
3
- using NHibernate . DomainModel ;
4
+ using NHibernate . Linq ;
5
+ using NHibernate . Test . TransactionTest ;
4
6
using NUnit . Framework ;
5
7
6
8
namespace NHibernate . Test . SystemTransactions
7
9
{
8
10
[ TestFixture ]
9
- public class TransactionFixture : TestCase
11
+ public class TransactionFixture : TransactionFixtureBase
10
12
{
11
- protected override IList Mappings
12
- {
13
- get { return new string [ ] { "WZ.hbm.xml" } ; }
14
- }
15
-
16
13
[ Test ]
17
14
public void CanUseSystemTransactionsToCommit ( )
18
15
{
19
- object identifier ;
16
+ int identifier ;
20
17
using ( ISession session = Sfi . OpenSession ( ) )
21
18
using ( TransactionScope tx = new TransactionScope ( ) )
22
19
{
23
- W s = new W ( ) ;
20
+ var s = new Person ( ) ;
24
21
session . Save ( s ) ;
25
22
identifier = s . Id ;
26
23
tx . Complete ( ) ;
@@ -29,11 +26,84 @@ public void CanUseSystemTransactionsToCommit()
29
26
using ( ISession session = Sfi . OpenSession ( ) )
30
27
using ( TransactionScope tx = new TransactionScope ( ) )
31
28
{
32
- W w = session . Get < W > ( identifier ) ;
29
+ var w = session . Get < Person > ( identifier ) ;
33
30
Assert . IsNotNull ( w ) ;
34
31
session . Delete ( w ) ;
35
32
tx . Complete ( ) ;
36
33
}
37
34
}
35
+
36
+ [ Test ]
37
+ public void FlushFromTransactionAppliesToDisposedSharingSession ( )
38
+ {
39
+ var flushOrder = new List < int > ( ) ;
40
+ using ( var s = OpenSession ( new TestInterceptor ( 0 , flushOrder ) ) )
41
+ {
42
+ var builder = s . SessionWithOptions ( ) . Connection ( ) ;
43
+
44
+ using ( var t = new TransactionScope ( ) )
45
+ {
46
+ var p1 = new Person ( ) ;
47
+ var p2 = new Person ( ) ;
48
+ var p3 = new Person ( ) ;
49
+ var p4 = new Person ( ) ;
50
+
51
+ using ( var s1 = builder . Interceptor ( new TestInterceptor ( 1 , flushOrder ) ) . OpenSession ( ) )
52
+ s1 . Save ( p1 ) ;
53
+ using ( var s2 = builder . Interceptor ( new TestInterceptor ( 2 , flushOrder ) ) . OpenSession ( ) )
54
+ {
55
+ s2 . Save ( p2 ) ;
56
+ using ( var s3 = s2 . SessionWithOptions ( ) . Connection ( ) . Interceptor ( new TestInterceptor ( 3 , flushOrder ) ) . OpenSession ( ) )
57
+ s3 . Save ( p3 ) ;
58
+ }
59
+ s . Save ( p4 ) ;
60
+ t . Complete ( ) ;
61
+ }
62
+ }
63
+
64
+ Assert . That ( flushOrder , Is . EqualTo ( new [ ] { 1 , 2 , 3 , 0 } ) ) ;
65
+
66
+ using ( var s = OpenSession ( ) )
67
+ using ( var t = s . BeginTransaction ( ) )
68
+ {
69
+ Assert . That ( s . Query < Person > ( ) . Count ( ) , Is . EqualTo ( 4 ) ) ;
70
+ t . Commit ( ) ;
71
+ }
72
+ }
73
+
74
+ [ Test ]
75
+ public void FlushFromTransactionAppliesToSharingSession ( )
76
+ {
77
+ var flushOrder = new List < int > ( ) ;
78
+ using ( var s = OpenSession ( new TestInterceptor ( 0 , flushOrder ) ) )
79
+ {
80
+ var builder = s . SessionWithOptions ( ) . Connection ( ) ;
81
+
82
+ using ( var s1 = builder . Interceptor ( new TestInterceptor ( 1 , flushOrder ) ) . OpenSession ( ) )
83
+ using ( var s2 = builder . Interceptor ( new TestInterceptor ( 2 , flushOrder ) ) . OpenSession ( ) )
84
+ using ( var s3 = s2 . SessionWithOptions ( ) . Connection ( ) . Interceptor ( new TestInterceptor ( 3 , flushOrder ) ) . OpenSession ( ) )
85
+ using ( var t = new TransactionScope ( ) )
86
+ {
87
+ var p1 = new Person ( ) ;
88
+ var p2 = new Person ( ) ;
89
+ var p3 = new Person ( ) ;
90
+ var p4 = new Person ( ) ;
91
+ s1 . Save ( p1 ) ;
92
+ s2 . Save ( p2 ) ;
93
+ s3 . Save ( p3 ) ;
94
+ s . Save ( p4 ) ;
95
+ t . Complete ( ) ;
96
+ }
97
+ }
98
+
99
+ Assert . That ( flushOrder , Is . EqualTo ( new [ ] { 1 , 2 , 3 , 0 } ) ) ;
100
+
101
+ using ( var s = OpenSession ( ) )
102
+ using ( var t = s . BeginTransaction ( ) )
103
+ {
104
+ Assert . That ( s . Query < Person > ( ) . Count ( ) , Is . EqualTo ( 4 ) ) ;
105
+ t . Commit ( ) ;
106
+ }
107
+ }
38
108
}
39
109
}
0 commit comments