我有NHibernate的二級緩存問題。當我使用查詢時:LINQ到NHibernate和動態LINQ - 查詢緩存不起作用
var items1 = Session.Query<Row>()
.Cacheable();
.Fetch(x => x.Field)
.OrderBy(x => x.Field.Value)
.ToList();
一切都很好 - 查詢被緩存。但是,當我想用動態的LINQ(a link):
var items2 = Session.Query<Row>()
.Cacheable();
.Fetch(x => x.Field)
.OrderBy("Field.Value")
.ToList();
查詢不被緩存。有趣的是,當我刪除代碼行時:
.Fetch(x => x.Field)
緩存再次工作。所以問題是一起使用Fetch和動態linq OrderBy方法。
編輯:
當我嘗試做調試NH代碼(QueryKey類),調試器告訴我,這兩個查詢不具有相同的使用ResultTransformer(更深:一個listTransformation私有實例)。
任何想法?
Chris
您使用的是什麼版本的NH? – hazzik 2012-08-03 12:21:49
NHibernate 3.3.1.4000 – cryss 2012-08-03 12:28:45
也許NH確定查詢有問題。我不知道NH如何存儲用於比較和從緩存加載的查詢標識符(整個SQL?)。但是當我比較第一個和第二個示例中的ExpressionTree(在調用ToList之前)時,它們是相同的。 – cryss 2012-08-03 13:18:24