NHibernate缓存问题 - 何时调用Evict?

Bri*_*ian 4 nhibernate asp.net-mvc caching evict

我遇到了一个明显的缓存问题,即NHibernate返回的内容与数据库中的内容不匹配.

我相信这是level2缓存数据.看起来我可以使用Evict来执行此操作,但是什么时候应该实际调用Evict方法? 对于我的特定应用程序,数据对用户来说是唯一的,并且提供的数据很可能只使用一次*.

我可以完全禁用这些对象的Level2缓存吗?

更新10/31

我的情况是:我有一个购物车,客户将添加和删除项目.什么我做的是以下几点:处理到购物车更新之前,我驱逐CartCartProduct实体.完成后,我CartProducts从提供程序中检索列表并返回视图(这发生在.NET MVC控制器中).

更新11/3

购物车已经完成,我遇到了一个似乎与同一个NHibernate问题有关的问题,但实际上是一个MVC问题.更深入的挖掘揭示了HTML Helper扩展覆盖了我想要的值,并取而代之的是Model状态.所以在这个问题上有一个双重打击.希望这有助于某人.

Ran*_*den 18

不,您无法禁用某些实体的缓存.

你有几个选择:

  1. 使用ISession.Clear()清除NHibernate缓存中的所有实体.
  2. 使用ISession.Evict(obj)从缓存中清除特定实体.
  3. 使用ISessionFactory.Evict(typeof(obj))从缓存中驱逐特定类型的所有实体/对象.在我看来,这将是你最想要的.
  4. 使用IStatelessSession从数据库中获取对象/实体,因为这完全绕过了所有缓存.