@@ -146,11 +146,7 @@ public void ClientProfileTest01()
146146 Assert . That ( person , Is . Not . Null ) ;
147147 Assert . That ( person . Id , Is . EqualTo ( outerSessionPersonId ) ) ;
148148
149- var countOuter = 0 ;
150- foreach ( var item in person . Sports ) {
151- countOuter ++ ;
152- }
153-
149+ var countOuter = person . Sports . AsEnumerable ( ) . Count ( ) ;
154150 Assert . That ( countOuter , Is . EqualTo ( actualCountInStorage ) ) ;
155151
156152 using ( var innerSession = Domain . OpenSession ( configuration ) ) {
@@ -159,34 +155,29 @@ public void ClientProfileTest01()
159155 _ = person1 . Sports . Add ( sport3 ) ;
160156 innerSession . SaveChanges ( ) ;
161157
162- var countInner = 0 ;
163- foreach ( var item in person1 . Sports ) {
164- countInner ++ ;
165- }
158+ var countInner = person1 . Sports . AsEnumerable ( ) . Count ( ) ;
166159 Assert . That ( countInner , Is . EqualTo ( 3 ) ) ;
167160
168161 person1 = innerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
169162 actualCountInStorage = innerSession . Query . All < Sports > ( ) . Count ( ) ;
170163
171164 Assert . That ( actualCountInStorage , Is . EqualTo ( 3 ) ) ;
172165
173- countInner = 0 ;
174- foreach ( var item in person1 . Sports ) {
175- countInner ++ ;
176- }
177-
166+ countInner = person1 . Sports . AsEnumerable ( ) . Count ( ) ;
178167 Assert . That ( countInner , Is . EqualTo ( actualCountInStorage ) ) ;
179168 }
180169
170+ // autoprefetch
171+ countOuter = person . Sports . AsEnumerable ( ) . Count ( ) ;
172+ Assert . That ( countOuter , Is . EqualTo ( 2 ) ) ;
173+
174+ // force manual prefetch
181175 person . Sports . Prefetch ( ) ;
182176 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
183177
184178 Assert . That ( actualCountInStorage , Is . EqualTo ( 3 ) ) ;
185179
186- countOuter = 0 ;
187- foreach ( var item in person . Sports ) {
188- countOuter ++ ;
189- }
180+ countOuter = person . Sports . AsEnumerable ( ) . Count ( ) ;
190181 Assert . That ( countOuter , Is . EqualTo ( actualCountInStorage ) ) ;
191182 }
192183 }
@@ -217,11 +208,7 @@ public void ClientProfileTest02()
217208 Assert . That ( person , Is . Not . Null ) ;
218209 Assert . That ( person . Id , Is . EqualTo ( outerSessionPersonId ) ) ;
219210
220- var countOuter = 0 ;
221- foreach ( var item in person . Sports ) {
222- countOuter ++ ;
223- }
224-
211+ var countOuter = person . Sports . AsEnumerable ( ) . Count ( ) ;
225212 Assert . That ( countOuter , Is . EqualTo ( actualCountInStorage ) ) ;
226213
227214 using ( var innerSession = Domain . OpenSession ( configuration ) ) {
@@ -230,34 +217,29 @@ public void ClientProfileTest02()
230217 _ = person1 . Sports . Add ( sport3 ) ;
231218 innerSession . SaveChanges ( ) ;
232219
233- var countInner = 0 ;
234- foreach ( var item in person1 . Sports ) {
235- countInner ++ ;
236- }
220+ var countInner = person1 . Sports . AsEnumerable ( ) . Count ( ) ;
237221 Assert . That ( countInner , Is . EqualTo ( 3 ) ) ;
238222
239223 person1 = innerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
240224 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
241225
242226 Assert . That ( actualCountInStorage , Is . EqualTo ( 3 ) ) ;
243227
244- countInner = 0 ;
245- foreach ( var item in person1 . Sports ) {
246- countInner ++ ;
247- }
248-
228+ countInner = person1 . Sports . AsEnumerable ( ) . Count ( ) ;
249229 Assert . That ( countInner , Is . EqualTo ( actualCountInStorage ) ) ;
250230 }
251231
232+ // autoprefetch
233+ countOuter = person . Sports . AsEnumerable ( ) . Count ( ) ;
234+ Assert . That ( countOuter , Is . EqualTo ( 2 ) ) ;
235+
236+ //force manual prefetch
252237 person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
253238 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
254239
255240 Assert . That ( actualCountInStorage , Is . EqualTo ( 3 ) ) ;
256241
257- countOuter = 0 ;
258- foreach ( var item in person . Sports ) {
259- countOuter ++ ;
260- }
242+ countOuter = person . Sports . AsEnumerable ( ) . Count ( ) ;
261243 Assert . That ( countOuter , Is . EqualTo ( actualCountInStorage ) ) ;
262244 }
263245 }
@@ -302,9 +284,12 @@ public void ReadUncommitedTest1()
302284 innerSessionTx . Complete ( ) ;
303285 }
304286
287+ // autoprefetch
288+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ;
289+
305290 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
306291 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
307- person . Sports . Prefetch ( ) ;
292+ person . Sports . Prefetch ( ) ; // force manual prefetch
308293 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
309294 }
310295 }
@@ -346,11 +331,14 @@ public void ReadUncommitedTest2()
346331 innerSessionTx . Complete ( ) ;
347332 }
348333
334+ // autoprefetch
335+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ;
336+
349337 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
350338 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
351339
352340 Assert . That ( outerSession . Query . All < Sports > ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
353- person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
341+ person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ; // force manual prefetch
354342 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
355343 }
356344 }
@@ -393,9 +381,11 @@ public void ReadUncommitedTest3()
393381 }
394382
395383 using ( var innerTx = outerSession . OpenTransaction ( TransactionOpenMode . New , IsolationLevel . RepeatableRead ) ) {
384+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ; // autoprefetch
385+
396386 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
397387 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
398- person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
388+ person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ; // force manual prefetch
399389 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
400390 }
401391 }
@@ -441,9 +431,12 @@ public void ReadCommittedTest1()
441431 innerSessionTx . Complete ( ) ;
442432 }
443433
434+ // autoprefetch
435+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ;
436+
444437 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
445438 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
446- person . Sports . Prefetch ( ) ;
439+ person . Sports . Prefetch ( ) ; // force manual prefetch
447440 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
448441 }
449442 }
@@ -485,11 +478,14 @@ public void ReadCommittedTest2()
485478 innerSessionTx . Complete ( ) ;
486479 }
487480
481+ // autoprefetch
482+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ;
483+
488484 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
489485 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
490486
491487 Assert . That ( outerSession . Query . All < Sports > ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
492- person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
488+ person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ; // force manual prefetch
493489 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
494490 }
495491 }
@@ -532,9 +528,11 @@ public void ReadCommittedTest3()
532528 }
533529
534530 using ( var innerTx = outerSession . OpenTransaction ( TransactionOpenMode . New , IsolationLevel . RepeatableRead ) ) {
531+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ; // autoprefetch
532+
535533 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
536534 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
537- person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
535+ person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ; // force manual prefetch
538536 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
539537 }
540538 }
@@ -580,14 +578,17 @@ public void RepeatableReadTest1()
580578 innerSessionTx . Complete ( ) ;
581579 }
582580
581+ // autoprefetch
582+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ;
583+
583584 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
584585 if ( StorageProviderInfo . Instance . Provider == StorageProvider . SqlServer ) {
585586 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
586587 }
587588 else {
588589 Assert . That ( actualCountInStorage , Is . EqualTo ( 0 ) ) ;
589590 }
590- person . Sports . Prefetch ( ) ;
591+ person . Sports . Prefetch ( ) ; // force manual prefetch
591592 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
592593 }
593594 }
@@ -629,6 +630,9 @@ public void RepeatableReadTest2()
629630 innerSessionTx . Complete ( ) ;
630631 }
631632
633+ // autoprefetch
634+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ;
635+
632636 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
633637 if ( StorageProviderInfo . Instance . Provider == StorageProvider . SqlServer ) {
634638 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
@@ -638,7 +642,7 @@ public void RepeatableReadTest2()
638642 }
639643
640644 Assert . That ( outerSession . Query . All < Sports > ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
641- person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
645+ person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ; // force manual prefetch
642646 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
643647 }
644648 }
@@ -681,6 +685,8 @@ public void RepeatableReadTest3()
681685 }
682686
683687 using ( var innerTx = outerSession . OpenTransaction ( TransactionOpenMode . New , IsolationLevel . RepeatableRead ) ) {
688+ Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( 0 ) ) ; // autoprefetch
689+
684690 actualCountInStorage = outerSession . Query . All < Sports > ( ) . Count ( ) ;
685691 if ( StorageProviderInfo . Instance . Provider == StorageProvider . SqlServer ) {
686692 Assert . That ( actualCountInStorage , Is . EqualTo ( 1 ) ) ;
@@ -689,7 +695,7 @@ public void RepeatableReadTest3()
689695 Assert . That ( actualCountInStorage , Is . EqualTo ( 0 ) ) ;
690696 }
691697
692- person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ;
698+ person = outerSession . Query . All < Person > ( ) . Prefetch ( p => p . Sports ) . FirstOrDefault ( ) ; // force manual prefetch
693699 Assert . That ( person . Sports . AsEnumerable ( ) . Count ( ) , Is . EqualTo ( actualCountInStorage ) ) ;
694700 }
695701 }
0 commit comments