2011-02-07 4 views

답변

5

엔티티를 반환하는 데 사용하지만 두 번째 수준 캐시를 사용하지 않으면 쿼리가 곧바로 db로 이동합니다.

이를 고려

var fooUsingGet = session.Get<Foo>(fooId); 
var fooQueryById = session.Query<Foo>().Single(f => f.Id == fooId); 

두 쿼리가 실행됩니다 (대한 하나, 쿼리에 대한 하나를 얻을),하지만 두 변수가 같은 개체 참조가 포함되어 있습니다.

이제 2 레벨 캐시, 쿼리 캐싱을 활성화하고 쿼리 캐싱을 지정하는 경우 :

var fooQueryById = session.Query<Foo>().Cacheable() 
          .Single(f => f.Id == fooId); 
var fooQueryByIdAgain = session.Query<Foo>().Cacheable() 
           .Single(f => f.Id == fooId); 

하나 개의 쿼리가 실행됩니다.

+1

향후 사용자를위한 메모 : 첫 번째 코드 블록에서는 (쿼리가 이어지는 경우) 두 개의 쿼리가 실제로 실행됩니다. 그러나 순서를 변경하고 (쿼리에 get이 뒤따라야 함) 첫 번째 캐시가 실행되기 때문에 하나만 보게됩니다. 쿼리가 캐시를 소중히합니다. 이것은 ayendes "Get, Load, Id by query"기사에 반하는 내용이지만 linq 드라이버의 이전 버전을 참조하는 것으로 보입니다. –

0

아니요, 이해합니다. 두 번째 레벨 캐시 만 사용합니다. 전나무 레벨 캐시는 GetLoad에만 해당됩니다.