オブジェクトにエンティティ キャッシュ (第 2 レベルのキャッシュ) を使用しています。ここで、ある特定のクエリ (私は OueryOver を使用) で、第 2 レベルのキャッシュを回避する必要があります。クエリで「キャッシュ可能」属性を省略しようとしましたが、クエリはまだキャッシュされています。
私のランタイム:
.NET 4.0 NHibernate: 3.1.0.4000 Fluent NHibernate: 1.2.0.712
私のオブジェクト:
[Serializable]
public class ArticleWishListItem : EntityBase<int>
{
public virtual int CustomerId { get; set; }
public virtual int ArticleId { get; set; }
public virtual DateTime CreatedDate { get; set; }
}
私のマッピング:
public class ArticleWishListItemMapping : ClassMap<ArticleWishListItem>
{
public ArticleWishListItemMapping()
{
Cache.ReadWrite().Region("WishList");
Id(a => a.Id).GeneratedBy.Native();
Map(a => a.ArticleId).Not.Nullable();
Map(a => a.CreatedDate).Not.Nullable();
Map(a => a.CustomerId).Not.Nullable();
}
}
私の希望に反して結果がキャッシュされる私のクエリ:
private static List<ArticleWishListItem> GetArticleWishListItemsImplementation(NHibernate.ISession session, int customerId)
{
return session.QueryOver<ArticleWishListItem>()
.Where(a => a.CustomerId == customerId)
.List<ArticleWishListItem>()
.ToList<ArticleWishListItem>();
}
エンティティのキャッシュを有効にしたい場合でも、このクエリを毎回データベースにヒットさせる最善の方法は何ですか? IStatelessSession を使用できます。この場合、2 番目のレベルのキャッシュをスキップするため機能しますが、推奨される解決策ですか?