linq查询的nhibernate缓存问题

linq查询的nhibernate缓存问题,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在nhibernate缓存中看到一些奇怪的行为,无法理解其原因。在执行选择操作(如)时,我无法缓存查询 query.Select(x=>x).ToList() 但在执行以下操作时可以缓存: var query = session.Linq<Promoter>(); var p = query.ToList(); 使用fluent配置缓存: SessionFactory = Fluently.Configure() .Database(MsSqlC

我在nhibernate缓存中看到一些奇怪的行为,无法理解其原因。在执行选择操作(如)时,我无法缓存查询

query.Select(x=>x).ToList() 
但在执行以下操作时可以缓存:

var query = session.Linq<Promoter>();
var p = query.ToList();
使用fluent配置缓存:

SessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008
                          .ConnectionString(ConfigurationService.SqlConnectionString)
                          .ShowSql()
                         .Cache(c => c

                                    .UseQueryCache()
                                    .ProviderClass(typeof(NHibernate.Cache.HashtableCacheProvider).AssemblyQualifiedName))
                          )
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<EventMap>()
                               .Conventions.Setup(MappingConventions.GetConventions()))
            .ExposeConfiguration(BuildSchema)
            .BuildSessionFactory();
SessionFactory=fluntly.Configure()
.数据库(MsSqlConfiguration.MsSql2008
.ConnectionString(ConfigurationService.SqlConnectionString)
.ShowSql()
.Cache(c=>c
.UseQueryCache()
.ProviderClass(typeof(NHibernate.Cache.HashtableCacheProvider.AssemblyQualifiedName))
)
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.Conventions.Setup(MappingConventions.GetConventions())
.ExposeConfiguration(构建架构)
.BuildSessionFactory();

在.Select(x=>x)中使用.Select()似乎有问题,因为某些原因,在使用Select时会绕过缓存。任何其他语句都可以正常工作,如OrderBy()、Where()等

示例代码如下:

using (var session = factory.OpenSession())
           {
               Console.WriteLine("");
               var query = session.Linq<Promoter>();
               query.QueryOptions.SetCachable(true);
               query.QueryOptions.SetCacheMode(CacheMode.Normal);
               var p = query.OrderBy(x => x.Name).ToList();// works fine
               //var p = query.OrderBy(x => x.Name).Select(x=>x).ToList();// will hit the db
           }
使用(var session=factory.OpenSession())
{
控制台。写线(“”);
var query=session.Linq();
query.QueryOptions.setcacable(true);
query.QueryOptions.SetCacheMode(CacheMode.Normal);
var p=query.OrderBy(x=>x.Name).ToList();//工作正常
//var p=query.OrderBy(x=>x.Name)。Select(x=>x)。ToList();//将命中数据库
}
SessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008
                          .ConnectionString(ConfigurationService.SqlConnectionString)
                          .ShowSql()
                         .Cache(c => c

                                    .UseQueryCache()
                                    .ProviderClass(typeof(NHibernate.Cache.HashtableCacheProvider).AssemblyQualifiedName))
                          )
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<EventMap>()
                               .Conventions.Setup(MappingConventions.GetConventions()))
            .ExposeConfiguration(BuildSchema)
            .BuildSessionFactory();
using (var session = factory.OpenSession())
           {
               Console.WriteLine("");
               var query = session.Linq<Promoter>();
               query.QueryOptions.SetCachable(true);
               query.QueryOptions.SetCacheMode(CacheMode.Normal);
               var p = query.OrderBy(x => x.Name).ToList();// works fine
               //var p = query.OrderBy(x => x.Name).Select(x=>x).ToList();// will hit the db
           }