1

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 プロファイラーから、毎回新しいセッションを開き、このクエリを繰り返し実行することがわかります。

何か案は?ありがとう

4

0 に答える 0