【问题标题】:NHibernate concurrency / cache problemNHibernate 并发/缓存问题
【发布时间】:2009-11-17 10:58:21
【问题描述】:

我在一台机器上运行了两个应用程序,其中 NHibernate 用作 ORM。一个应用程序正在管理对象(CRUD 操作),而另一个应用程序正在处理对象(获取、处理、设置状态和保存)。

首先我让处理应用程序处理一个对象并将状态设置为已处理。然后我在数据库中手动更改文本属性并重置状态(使其再次处理)。手动数据库编辑是模拟管理应用程序。然后我开始看到问题:

  1. 虽然我已经在数据库中更改了事件,但读取的对象仍然具有旧的文本属性。我猜NHibernate缓存是这里的问题。

  2. 当我将对象的状态设置为已处理时,它会在更新时使用 where 子句中的所有属性,这意味着它不会在数据库中更新。这是因为它在属性中包含错误的文本。我猜这也与缓存有关。

状态不更新的后果是同一个对象(带有错误文本)被一遍又一遍地处理......

有谁能帮我设置 NHibernate 以使这个问题消失吗?

【问题讨论】:

    标签: nhibernate caching concurrency


    【解决方案1】:

    最好在您想要的对象上调用refresh 方法,因为刷新可能会产生不必要的副作用。

    【讨论】:

    • 你的意思是 Session.Refresh(obj)?我想在运行条件时已经访问了数据库,所以这会导致每个对象都额外访问数据库,对吧?从性能的角度来看,这听起来像是一件坏事。在处理一大堆对象时,我不能在标准中做点什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多