2011-02-07 3 views

答えて

5

エンティティを返すために使用しますが、2番目のレベルのキャッシュを使用しない限り、クエリはdbにまっすぐに進みます。

はこのことを考えてみましょう:

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

2つのクエリが実行されている(のための1つのクエリに1つを取得します)が、両方の変数が同じオブジェクト参照が含まれています。

さて、あなたは第二レベルのキャッシュ、クエリキャッシュを有効にし、クエリのキャッシュを指定した場合:

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

つだけのクエリが実行されます。

+1

将来の人々のためのちょっとした注意:最初のコードブロックでは、(クエリの後に続く)2つのクエリが実際に実行されます。しかし、順序を変更すると(クエリの後にget)、1つ目のレベルのキャッシュが開始されるため、クエリではキャッシュがプライムされます。これはayendes "Get、Load、Id by query"の記事に反していますが、これは以前のバージョンのlinqドライバを参照しているようです –

0

いいえ、私が理解しているように、そうではありません。彼らは第2レベルのキャッシュのみを使用します。 FirsレベルのキャッシュはGetLoadのみです。

関連する問題