我对对象使用实体缓存(二级缓存)。现在,在一个特定的查询(我使用 OueryOver)中,我需要避开二级缓存。我试图在我的查询中省略“Cacheable”属性,但查询仍然被缓存,通过我假设的二级缓存。
我的运行时:
.NET 4.0 NHibernate:3.1.0.4000 流畅的 NHiberante: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,它会在这种情况下工作,因为它会跳过二级缓存,但这是推荐的解决方案吗?