select ステートメントをキャッシュしようとしていますが、成功しません。
私はこのエンティティを持っています
public class Merchant : Entity<Merchant>
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string OrdersEmail { get; set; }
public virtual string Host { get; set; }
}
マッピングはこんな感じ
public class MerchantMap : ClassMap<Merchant>
{
public MerchantMap()
{
Id(m => m.Id);
Map(m => m.Name);
Map(m => m.OrdersEmail);
Map(m => m.Email);
Map(m => m.Host);
Cache.ReadWrite();
ReadOnly();
}
}
. セッション ファクトリは、次のクラスで生成されます。
public ISessionFactory TenantConfiguration()
{
var connectionString = System.Configuration
.ConfigurationManager
.ConnectionStrings["Tenant"]
.ConnectionString;
var config = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(connectionString)
)
.Mappings(cfg => cfg.FluentMappings
.AddFromAssemblyOf<Entities.Merchant>()
)
.Cache(c =>
c.UseQueryCache()
.UseSecondLevelCache()
.ProviderClass<NHibernate.Cache.HashtableCacheProvider>()
.RegionPrefix("Tenant")
)
.ExposeConfiguration(c => c.SetProperty(
NHibernate.Cfg
.Environment
.SessionFactoryName,
"Tenant")
)
.BuildConfiguration();
var factory = config.BuildSessionFactory();
return factory;
}
public ISession CreateMerchantSession()
{
lock (factorySyncRoot)
{
return TenantConfiguration().OpenSession();
}
}
キャッシュしたい唯一のクエリは次のとおりです。
var merchants = new TenantSessionSource().CreateMerchantSession()
.QueryOver<Merchant>()
.Cacheable().Future().ToList();
私はほとんどすべてを試し、関連するすべての質問を赤くしましたが、成功しませんでした。nhibernate プロファイラーから、毎回新しいセッションを開き、このクエリを繰り返し実行することがわかります。
何か案は?ありがとう