Skip to content

Commit 4941920

Browse files
committed
Checks work of autoprefetch + item counting improvements
1 parent 6890c1e commit 4941920

File tree

1 file changed

+51
-45
lines changed

1 file changed

+51
-45
lines changed

Orm/Xtensive.Orm.Tests/Issues/IssueJira0795_EntitySetPrefetchDoesNotWork.cs

Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)