【问题标题】:Stale data in first level cache一级缓存中的陈旧数据
【发布时间】:2011-12-27 09:05:14
【问题描述】:

我有多个会话同时在我的数据库中工作。 (常规 DB 会话和 NHibernate 会话)

当我第一次从 D.B. 获得实体时。实体存储在第一级缓存 - 身份映射中。

如果在第一次查询之后实体在 NH 会话之外发生了变化,会发生什么?数据已过时。

session.Get<Cat>(1).Name == "Bar" // true
// different session trigger updated the cat name to "Foo"    
session.Get<Cat>(1).Name == "Bar" // true

有没有办法将 NHibernate 会话同步到会话外的更改?

【问题讨论】:

    标签: c# nhibernate orm


    【解决方案1】:

    这很简单:

    session.Refresh(cat);
    

    【讨论】:

    • 一如既往的正确和有用...如果更改发生在我刷新对象之前怎么办。我不想写刷新每一行来验证实体没有改变。你有什么要给我的吗?
    • 您是否正在寻找所有会话中的所有实体在每次有提交时自动刷新?您可以进行消息传递(即向所有会话容器广播更新消息),但我会改用乐观并发。
    • 只更新那些在其他会话(不是 NH 会话)中已更改的实体。无需刷新所有会话身份映射。
    • 是的,我的意思是更新的实体。这是一个什么样的应用程序? (桌面、网络、其他)
    • 我不认为在网络应用程序中使用 Refresh 是一个很好的例子。一个请求通常需要不到一秒的时间;使用 Refresh 将完全扼杀您的可伸缩性。请改用乐观并发和事务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2016-05-20
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多