linq查询的nhibernate缓存问题
我在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
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
}