5
5
6
6
namespace NHibernate . Test . SecondLevelCacheTests
7
7
{
8
+ using System . Data ;
9
+ using Expressions ;
10
+
8
11
[ TestFixture ]
9
12
public class SecondLevelCacheTest : TestCase
10
13
{
@@ -15,7 +18,7 @@ protected override string MappingsAssembly
15
18
16
19
protected override IList Mappings
17
20
{
18
- get { return new string [ ] { "SecondLevelCacheTest.Item.hbm.xml" } ; }
21
+ get { return new string [ ] { "SecondLevelCacheTest.Item.hbm.xml" } ; }
19
22
}
20
23
21
24
protected override void OnSetUp ( )
@@ -25,6 +28,7 @@ protected override void OnSetUp()
25
28
sessions = cfg . BuildSessionFactory ( ) ;
26
29
27
30
using ( ISession session = OpenSession ( ) )
31
+ using ( ITransaction tx = session . BeginTransaction ( ) )
28
32
{
29
33
Item item = new Item ( ) ;
30
34
item . Id = 1 ;
@@ -37,7 +41,15 @@ protected override void OnSetUp()
37
41
session . Save ( child ) ;
38
42
item . Children . Add ( child ) ;
39
43
}
40
- session . Flush ( ) ;
44
+
45
+ for ( int i = 0 ; i < 5 ; i ++ )
46
+ {
47
+ AnotherItem obj = new AnotherItem ( "Item #" + i ) ;
48
+ obj . Id = i + 1 ;
49
+ session . Save ( obj ) ;
50
+ }
51
+
52
+ tx . Commit ( ) ;
41
53
}
42
54
43
55
sessions . Evict ( typeof ( Item ) ) ;
@@ -49,6 +61,7 @@ protected override void OnTearDown()
49
61
using ( ISession session = OpenSession ( ) )
50
62
{
51
63
session . Delete ( "from Item" ) ; //cleaning up
64
+ session . Delete ( "from AnotherItem" ) ; //cleaning up
52
65
session . Flush ( ) ;
53
66
}
54
67
}
@@ -58,7 +71,7 @@ public void CachedQueriesHandlesEntitiesParametersCorrectly()
58
71
{
59
72
using ( ISession session = OpenSession ( ) )
60
73
{
61
- Item one = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
74
+ Item one = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
62
75
IList results = session . CreateQuery ( "from Item item where item.Parent = :parent" )
63
76
. SetEntity ( "parent" , one )
64
77
. SetCacheable ( true ) . List ( ) ;
@@ -71,7 +84,7 @@ public void CachedQueriesHandlesEntitiesParametersCorrectly()
71
84
72
85
using ( ISession session = OpenSession ( ) )
73
86
{
74
- Item two = ( Item ) session . Load ( typeof ( Item ) , 2 ) ;
87
+ Item two = ( Item ) session . Load ( typeof ( Item ) , 2 ) ;
75
88
IList results = session . CreateQuery ( "from Item item where item.Parent = :parent" )
76
89
. SetEntity ( "parent" , two )
77
90
. SetCacheable ( true ) . List ( ) ;
@@ -84,14 +97,14 @@ public void DeleteItemFromCollectionThatIsInTheSecondLevelCache()
84
97
{
85
98
using ( ISession session = OpenSession ( ) )
86
99
{
87
- Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
100
+ Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
88
101
Assert . IsTrue ( item . Children . Count == 4 ) ; // just force it into the second level cache here
89
102
}
90
103
int childId = - 1 ;
91
104
using ( ISession session = OpenSession ( ) )
92
105
{
93
- Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
94
- Item child = ( Item ) item . Children [ 0 ] ;
106
+ Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
107
+ Item child = ( Item ) item . Children [ 0 ] ;
95
108
childId = child . Id ;
96
109
session . Delete ( child ) ;
97
110
item . Children . Remove ( child ) ;
@@ -100,7 +113,7 @@ public void DeleteItemFromCollectionThatIsInTheSecondLevelCache()
100
113
101
114
using ( ISession session = OpenSession ( ) )
102
115
{
103
- Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
116
+ Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
104
117
Assert . AreEqual ( 3 , item . Children . Count ) ;
105
118
foreach ( Item child in item . Children )
106
119
{
@@ -115,7 +128,7 @@ public void InsertItemToCollectionOnTheSecondLevelCache()
115
128
{
116
129
using ( ISession session = OpenSession ( ) )
117
130
{
118
- Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
131
+ Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
119
132
Item child = new Item ( ) ;
120
133
child . Id = 6 ;
121
134
item . Children . Add ( child ) ;
@@ -125,10 +138,122 @@ public void InsertItemToCollectionOnTheSecondLevelCache()
125
138
126
139
using ( ISession session = OpenSession ( ) )
127
140
{
128
- Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
141
+ Item item = ( Item ) session . Load ( typeof ( Item ) , 1 ) ;
129
142
int count = item . Children . Count ;
130
143
Assert . AreEqual ( 5 , count ) ;
131
144
}
132
145
}
146
+
147
+ [ Test ]
148
+ public void SecondLevelCacheWithCriteriaQueries ( )
149
+ {
150
+ using ( ISession session = OpenSession ( ) )
151
+ {
152
+ IList list = session . CreateCriteria ( typeof ( AnotherItem ) )
153
+ . Add ( Expression . Gt ( "Id" , 2 ) )
154
+ . SetCacheable ( true )
155
+ . List ( ) ;
156
+ Assert . AreEqual ( 3 , list . Count ) ;
157
+
158
+ using ( IDbCommand cmd = session . Connection . CreateCommand ( ) )
159
+ {
160
+ cmd . CommandText = "DELETE FROM AnotherItem" ;
161
+ cmd . ExecuteNonQuery ( ) ;
162
+ }
163
+ }
164
+
165
+ using ( ISession session = OpenSession ( ) )
166
+ {
167
+ //should bring from cache
168
+ IList list = session . CreateCriteria ( typeof ( AnotherItem ) )
169
+ . Add ( Expression . Gt ( "Id" , 2 ) )
170
+ . SetCacheable ( true )
171
+ . List ( ) ;
172
+ Assert . AreEqual ( 3 , list . Count ) ;
173
+ }
174
+ }
175
+
176
+ [ Test ]
177
+ public void SecondLevelCacheWithCriteriaQueriesForItemWithCollections ( )
178
+ {
179
+ using ( ISession session = OpenSession ( ) )
180
+ {
181
+ IList list = session . CreateCriteria ( typeof ( Item ) )
182
+ . Add ( Expression . Gt ( "Id" , 2 ) )
183
+ . SetCacheable ( true )
184
+ . List ( ) ;
185
+ Assert . AreEqual ( 3 , list . Count ) ;
186
+
187
+ using ( IDbCommand cmd = session . Connection . CreateCommand ( ) )
188
+ {
189
+ cmd . CommandText = "DELETE FROM Item" ;
190
+ cmd . ExecuteNonQuery ( ) ;
191
+ }
192
+ }
193
+
194
+ using ( ISession session = OpenSession ( ) )
195
+ {
196
+ //should bring from cache
197
+ IList list = session . CreateCriteria ( typeof ( Item ) )
198
+ . Add ( Expression . Gt ( "Id" , 2 ) )
199
+ . SetCacheable ( true )
200
+ . List ( ) ;
201
+ Assert . AreEqual ( 3 , list . Count ) ;
202
+ }
203
+ }
204
+
205
+ [ Test ]
206
+ public void SecondLevelCacheWithHqlQueriesForItemWithCollections ( )
207
+ {
208
+ using ( ISession session = OpenSession ( ) )
209
+ {
210
+ IList list = session . CreateQuery ( "from Item i where i.Id > 2" )
211
+ . SetCacheable ( true )
212
+ . List ( ) ;
213
+ Assert . AreEqual ( 3 , list . Count ) ;
214
+
215
+ using ( IDbCommand cmd = session . Connection . CreateCommand ( ) )
216
+ {
217
+ cmd . CommandText = "DELETE FROM Item" ;
218
+ cmd . ExecuteNonQuery ( ) ;
219
+ }
220
+ }
221
+
222
+ using ( ISession session = OpenSession ( ) )
223
+ {
224
+ //should bring from cache
225
+ IList list = session . CreateQuery ( "from Item i where i.Id > 2" )
226
+ . SetCacheable ( true )
227
+ . List ( ) ;
228
+ Assert . AreEqual ( 3 , list . Count ) ;
229
+ }
230
+ }
231
+
232
+ [ Test ]
233
+ public void SecondLevelCacheWithHqlQueries ( )
234
+ {
235
+ using ( ISession session = OpenSession ( ) )
236
+ {
237
+ IList list = session . CreateQuery ( "from AnotherItem i where i.Id > 2" )
238
+ . SetCacheable ( true )
239
+ . List ( ) ;
240
+ Assert . AreEqual ( 3 , list . Count ) ;
241
+
242
+ using ( IDbCommand cmd = session . Connection . CreateCommand ( ) )
243
+ {
244
+ cmd . CommandText = "DELETE FROM AnotherItem" ;
245
+ cmd . ExecuteNonQuery ( ) ;
246
+ }
247
+ }
248
+
249
+ using ( ISession session = OpenSession ( ) )
250
+ {
251
+ //should bring from cache
252
+ IList list = session . CreateQuery ( "from AnotherItem i where i.Id > 2" )
253
+ . SetCacheable ( true )
254
+ . List ( ) ;
255
+ Assert . AreEqual ( 3 , list . Count ) ;
256
+ }
257
+ }
133
258
}
134
259
}
0 commit comments