@@ -408,6 +408,47 @@ public async Task FutureFetchIsCachableAsync()
408
408
Assert . That ( Sfi . Statistics . QueryCacheMissCount , Is . EqualTo ( 0 ) , "Unexpected cache miss count" ) ;
409
409
Assert . That ( Sfi . Statistics . QueryCacheHitCount , Is . EqualTo ( 2 ) , "Unexpected cache hit count" ) ;
410
410
}
411
+
412
+ [ Explicit ( "Not working. dto.Customer retrieved from cache as uninitialized proxy" ) ]
413
+ [ Test ]
414
+ public async Task ProjectedEntitiesAreCachableAsync ( )
415
+ {
416
+ Sfi . Statistics . Clear ( ) ;
417
+ await ( Sfi . EvictQueriesAsync ( ) ) ;
418
+ var dto = await ( session . Query < Order > ( )
419
+ . WithOptions ( o => o . SetCacheable ( true ) )
420
+ . Where ( x => x . OrderId == 10248 )
421
+ . Select ( x => new { Customer = x . Customer , Order = x } )
422
+ . FirstOrDefaultAsync ( ) ) ;
423
+
424
+ Assert . That ( dto . Order , Is . Not . Null ) ;
425
+ Assert . That ( NHibernateUtil . IsInitialized ( dto . Order ) , Is . True ) ;
426
+ Assert . That ( dto . Customer , Is . Not . Null ) ;
427
+ Assert . That ( NHibernateUtil . IsInitialized ( dto . Customer ) , Is . True ) ;
428
+
429
+ Assert . That ( Sfi . Statistics . QueryExecutionCount , Is . EqualTo ( 1 ) , "Unexpected execution count" ) ;
430
+ Assert . That ( Sfi . Statistics . QueryCachePutCount , Is . EqualTo ( 1 ) , "Unexpected cache put count" ) ;
431
+ Assert . That ( Sfi . Statistics . QueryCacheMissCount , Is . EqualTo ( 1 ) , "Unexpected cache miss count" ) ;
432
+
433
+ Sfi . Statistics . Clear ( ) ;
434
+ session . Clear ( ) ;
435
+
436
+ dto = await ( session . Query < Order > ( )
437
+ . WithOptions ( o => o . SetCacheable ( true ) )
438
+ . Where ( x => x . OrderId == 10248 )
439
+ . Select ( x => new { Customer = x . Customer , Order = x } )
440
+ . FirstOrDefaultAsync ( ) ) ;
441
+
442
+ Assert . That ( dto . Order , Is . Not . Null ) ;
443
+ Assert . That ( NHibernateUtil . IsInitialized ( dto . Order ) , Is . True ) ;
444
+ Assert . That ( dto . Customer , Is . Not . Null ) ;
445
+ Assert . That ( NHibernateUtil . IsInitialized ( dto . Customer ) , Is . True ) ;
446
+
447
+ Assert . That ( Sfi . Statistics . QueryExecutionCount , Is . EqualTo ( 0 ) , "Unexpected execution count" ) ;
448
+ Assert . That ( Sfi . Statistics . QueryCachePutCount , Is . EqualTo ( 0 ) , "Unexpected cache put count" ) ;
449
+ Assert . That ( Sfi . Statistics . QueryCacheMissCount , Is . EqualTo ( 0 ) , "Unexpected cache miss count" ) ;
450
+ Assert . That ( Sfi . Statistics . QueryCacheHitCount , Is . EqualTo ( 1 ) , "Unexpected cache hit count" ) ;
451
+ }
411
452
412
453
[ Test ]
413
454
public async Task CacheHqlQueryWithFetchAndTransformerThatChangeTupleAsync ( )
@@ -419,11 +460,11 @@ public async Task CacheHqlQueryWithFetchAndTransformerThatChangeTupleAsync()
419
460
// the combination of query and transformer doesn't make sense.
420
461
// It's simply used as example of returned data being transformed before caching leading to mismatch between
421
462
// Loader.ResultTypes collection and provided tuple
422
- order = await ( session . CreateQuery ( "select o.Customer.CompanyName , o from Order o join fetch o.Customer" )
423
- . SetMaxResults ( 1 )
424
- . SetCacheable ( true )
425
- . SetResultTransformer ( Transformers . RootEntity )
426
- . UniqueResultAsync < Order > ( ) ) ;
463
+ order = await ( session . CreateQuery ( "select o.Employee.FirstName , o from Order o join fetch o.Customer" )
464
+ . SetMaxResults ( 1 )
465
+ . SetCacheable ( true )
466
+ . SetResultTransformer ( Transformers . RootEntity )
467
+ . UniqueResultAsync < Order > ( ) ) ;
427
468
428
469
Assert . That ( Sfi . Statistics . QueryExecutionCount , Is . EqualTo ( 1 ) , "Unexpected execution count" ) ;
429
470
Assert . That ( Sfi . Statistics . QueryCachePutCount , Is . EqualTo ( 1 ) , "Unexpected cache put count" ) ;
@@ -435,7 +476,7 @@ public async Task CacheHqlQueryWithFetchAndTransformerThatChangeTupleAsync()
435
476
session . Clear ( ) ;
436
477
Sfi . Statistics . Clear ( ) ;
437
478
438
- order = await ( session . CreateQuery ( "select o.Customer.CompanyName , o from Order o join fetch o.Customer" )
479
+ order = await ( session . CreateQuery ( "select o.Employee.FirstName , o from Order o join fetch o.Customer" )
439
480
. SetMaxResults ( 1 )
440
481
. SetCacheable ( true )
441
482
. SetResultTransformer ( Transformers . RootEntity )
@@ -452,6 +493,7 @@ public async Task CacheHqlQueryWithFetchAndTransformerThatChangeTupleAsync()
452
493
453
494
private static void AssertFetchedOrder ( Order order )
454
495
{
496
+ Assert . That ( NHibernateUtil . IsInitialized ( order ) ) ;
455
497
Assert . That ( order . Customer , Is . Not . Null , "Expected the fetched Customer to be initialized" ) ;
456
498
Assert . That ( NHibernateUtil . IsInitialized ( order . Customer ) , Is . True , "Expected the fetched Customer to be initialized" ) ;
457
499
Assert . That ( NHibernateUtil . IsInitialized ( order . OrderLines ) , Is . True , "Expected the fetched OrderLines to be initialized" ) ;
0 commit comments