asp.net-mvc - NHibernate 缓存问题 - 何时调用 Evict?

标签 asp.net-mvc nhibernate caching evict

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

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

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

更新 10/31

我的场景是这样的:我有一个购物车,客户将在其中添加和删除商品。我正在做的事情如下:在处理购物车的更新之前,我逐出 CartCartProduct 实体。完成此操作后,我从提供程序检索 CartProducts 列表并返回 View (这发生在 .NET MVC Controller 中)。

更新 11/3

购物车已经完成,我遇到了一个似乎与同一 NHibernate 问题相关的问题,但实际上是 MVC 问题。更深入的挖掘表明,HTML Helper 扩展覆盖了我假设的值,并替换为模型状态中的值。所以这对我来说是双重打击。希望这对某人有帮助。

最佳答案

不可以,您无法禁用某些实体的缓存。

您确实有多种选择:

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

关于asp.net-mvc - NHibernate 缓存问题 - 何时调用 Evict?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131796/

相关文章:

c++ - 如果 T 对齐, std::vector<T> 也对齐吗?

asp.net-mvc - 在 ASP.NET MVC 中创建 SiteMap

c# - MVC4 无效的日期时间值

c# - 通过 View 上的按钮运行方法(ASP.NET MVC)

asp.net-mvc - 如何安全地向特定用户发送消息

nhibernate - 流利的 nhibernate 无法在函数上正确生成模式

nhibernate 自定义集合处理

iphone - 防止在从磁盘加载的 UIWebView 中缓存 .css 文件

NHibernate 将字符串参数转换为 nvarchar 而不是 varchar。我怎样才能阻止这个?

java - Spring Boot 缓存 TTL