@@ -388,6 +388,116 @@ public async Task UsingHqlToFutureWithCacheAndTransformerDoesntThrowAsync()
388
388
}
389
389
}
390
390
391
+ [ Test ]
392
+ public async Task ReadOnlyWorksWithFutureAsync ( )
393
+ {
394
+ using ( var s = OpenSession ( ) )
395
+ using ( var t = s . BeginTransaction ( ) )
396
+ {
397
+ var futureSimples =
398
+ s
399
+ . CreateQuery ( "from EntitySimpleChild" )
400
+ . SetReadOnly ( true )
401
+ . Future < EntitySimpleChild > ( ) ;
402
+ var futureSubselect =
403
+ s
404
+ . CreateQuery ( "from EntitySubselectChild" )
405
+ . Future < EntitySubselectChild > ( ) ;
406
+
407
+ var simples = ( await ( futureSimples . GetEnumerableAsync ( ) ) ) . ToList ( ) ;
408
+ Assert . That ( simples , Has . Count . GreaterThan ( 0 ) ) ;
409
+ foreach ( var entity in simples )
410
+ {
411
+ Assert . That ( s . IsReadOnly ( entity ) , Is . True , entity . Name ) ;
412
+ }
413
+
414
+ var subselect = ( await ( futureSubselect . GetEnumerableAsync ( ) ) ) . ToList ( ) ;
415
+ Assert . That ( subselect , Has . Count . GreaterThan ( 0 ) ) ;
416
+ foreach ( var entity in subselect )
417
+ {
418
+ Assert . That ( s . IsReadOnly ( entity ) , Is . False , entity . Name ) ;
419
+ }
420
+
421
+ await ( t . CommitAsync ( ) ) ;
422
+ }
423
+ }
424
+
425
+ [ Test ]
426
+ public async Task CacheModeWorksWithFutureAsync ( )
427
+ {
428
+ Sfi . Statistics . IsStatisticsEnabled = true ;
429
+
430
+ using ( var s = OpenSession ( ) )
431
+ using ( var t = s . BeginTransaction ( ) )
432
+ {
433
+ s
434
+ . CreateQuery ( "from EntitySimpleChild" )
435
+ . SetCacheable ( true )
436
+ . SetCacheMode ( CacheMode . Get )
437
+ . Future < EntitySimpleChild > ( ) ;
438
+ s
439
+ . CreateQuery ( "from EntityComplex" )
440
+ . SetCacheable ( true )
441
+ . SetCacheMode ( CacheMode . Put )
442
+ . Future < EntityComplex > ( ) ;
443
+ await ( s
444
+ . CreateQuery ( "from EntitySubselectChild" )
445
+ . SetCacheable ( true )
446
+ . Future < EntitySubselectChild > ( )
447
+ . GetEnumerableAsync ( ) ) ;
448
+ Assert . That ( Sfi . Statistics . QueryCachePutCount , Is . EqualTo ( 2 ) , "Future put" ) ;
449
+
450
+ await ( t . CommitAsync ( ) ) ;
451
+ }
452
+
453
+ using ( var s = OpenSession ( ) )
454
+ using ( var t = s . BeginTransaction ( ) )
455
+ {
456
+ Sfi . Statistics . Clear ( ) ;
457
+ await ( s
458
+ . CreateQuery ( "from EntitySimpleChild" )
459
+ . SetCacheable ( true )
460
+ . ListAsync < EntitySimpleChild > ( ) ) ;
461
+ Assert . That ( Sfi . Statistics . QueryCacheHitCount , Is . EqualTo ( 0 ) , "EntitySimpleChild query hit" ) ;
462
+
463
+ Sfi . Statistics . Clear ( ) ;
464
+ await ( s
465
+ . CreateQuery ( "from EntityComplex" )
466
+ . SetCacheable ( true )
467
+ . ListAsync < EntityComplex > ( ) ) ;
468
+ Assert . That ( Sfi . Statistics . QueryCacheHitCount , Is . EqualTo ( 1 ) , "EntityComplex query hit" ) ;
469
+
470
+ Sfi . Statistics . Clear ( ) ;
471
+ await ( s
472
+ . CreateQuery ( "from EntitySubselectChild" )
473
+ . SetCacheable ( true )
474
+ . ListAsync < EntitySubselectChild > ( ) ) ;
475
+ Assert . That ( Sfi . Statistics . QueryCacheHitCount , Is . EqualTo ( 1 ) , "EntitySubselectChild query hit" ) ;
476
+
477
+ await ( t . CommitAsync ( ) ) ;
478
+ }
479
+
480
+ using ( var s = OpenSession ( ) )
481
+ using ( var t = s . BeginTransaction ( ) )
482
+ {
483
+ Sfi . Statistics . Clear ( ) ;
484
+ s
485
+ . CreateQuery ( "from EntitySimpleChild" )
486
+ . SetCacheable ( true )
487
+ . SetCacheMode ( CacheMode . Get )
488
+ . Future < EntitySimpleChild > ( ) ;
489
+ await ( s
490
+ . CreateQuery ( "from EntitySubselectChild" )
491
+ . SetCacheable ( true )
492
+ . Future < EntitySubselectChild > ( )
493
+ . GetEnumerableAsync ( ) ) ;
494
+ Assert . That ( Sfi . Statistics . QueryCachePutCount , Is . EqualTo ( 0 ) , "Second future put" ) ;
495
+ Assert . That ( Sfi . Statistics . QueryCacheHitCount , Is . EqualTo ( 2 ) , "Second future hit" ) ;
496
+
497
+ await ( t . CommitAsync ( ) ) ;
498
+ }
499
+ }
500
+
391
501
#region Test Setup
392
502
393
503
protected override HbmMapping GetMappings ( )
@@ -471,6 +581,7 @@ protected override void OnTearDown()
471
581
session . Flush ( ) ;
472
582
transaction . Commit ( ) ;
473
583
}
584
+ Sfi . Statistics . IsStatisticsEnabled = false ;
474
585
}
475
586
476
587
protected override void OnSetUp ( )
0 commit comments