0
私はこれをしばらくの間稼働させようとしています。私はいくつかのルックアップテーブルからのフェッチを防ぐために第2レベルのキャッシュを有効にしたい。多対1で参照されるテーブルをキャッシュするためのnhibernateの取得方法 - 私の設定は正しいですか?
は、私はキャッシュ属性を追加私のxml構成に
cfg = new Configuration();
cfg.Properties[NHibernate.Cfg.Environment.ConnectionProvider] = "NHibernate.Connection.DriverConnectionProvider";
string connectionString = connection.ConnectionString;
cfg.Properties[NHibernate.Cfg.Environment.ConnectionString] = connectionString;
cfg.Properties[NHibernate.Cfg.Environment.ConnectionDriver] = "NHibernate.Driver.SqlClientDriver";
cfg.Properties[NHibernate.Cfg.Environment.Dialect] = "NHibernate.Dialect.MsSql2005Dialect";
cfg.Properties[NHibernate.Cfg.Environment.CommandTimeout] = "720";
cfg.Properties[NHibernate.Cfg.Environment.CacheProvider] = "NHibernate.Cache.HashtableCacheProvider";
cfg.Properties[NHibernate.Cfg.Environment.UseSecondLevelCache] = "true";
cfg.Properties[NHibernate.Cfg.Environment.UseQueryCache] = "true";
cfg.AddAssembly("APPName.PersistentEntities");
factory = cfg.BuildSessionFactory();
その後コードで私の構成を設定:
このエンティティは、その後、他の非キャッシュエンティティから参照される<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="APPName.PersistentEntities.LockStatus, APPName.PersistentEntities" table="LockStatus" lazy="false">
<meta attribute="class-description">lockstatus</meta>
<cache usage="read-only" />
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="native"></generator>
</id>
<property name="Name" column="Name" type="String" length="100" not-null="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="APPName.PersistentEntities.Entity, APPName.PersistentEntities" table="Entity" lazy="false">
<meta attribute="class-description">entity</meta>
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="native">
</generator>
</id>
<property name="Name" column="Name" type="String" length="500" not-null="true">
<meta attribute="field-description">name</meta>
</property>
<many-to-one name="LockStatus" column="LockStatusId" class="APPName.PersistentEntities.LockStatus, APPName.PersistentEntities" not-null="false" lazy="false">
</many-to-one>
</class>
</hibernate-mapping>
>
私のようなもので、この他のエンティティを照会:
session = factory.OpenSession();
IList<T> s = session.CreateSQLQuery(query).AddEntity(typeof(T)).SetCacheable(true).List<T>();
session.Clear();
session.Close();
クエリとマッピングはその私は、データベース内の名前を更新しようとキャッシュを使用して確認するために、とても細かい実行されます。アプリケーションでもう一度クリックすると、更新された名前が表示されるので、キャッシュを再クエリしていないと仮定します。
申し訳ありません、申し訳ありませんが、関係にどのようにキャッシュ宣言を指定しますか? -をに追加しようとしましたが、エラー –
が表示されます。http://bstansberry.wordpress.com/2009/10/09/collection-caching-in-the-hibernate-second-level-cache/ –
doesn本当に助けになる - そのページ(と私が読んだことのある他のもの)はセットのキャッシュについて話す。 1対多ではありますが、1対多の対話では、このシナリオでキャッシュすることは可能ですか? –