代码之家  ›  专栏  ›  技术社区  ›  Trent

运行时nHibernate只读实体

  •  3
  • Trent  · 技术社区  · 16 年前

    我想知道是否有一种方法可以使实体的实例在运行时不可变。我知道我可以有只读类型,但我希望在运行时有类型的只读实例。原因是,我希望通过修改属性来使用NH域对象(如轻量级实体),但不希望在执行session.flush()或类似操作时这些更改保持不变。始终存在session.evict(),但这不会阻止未知的开发人员进入session.save()中的“readonly”实体。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Randy Burden    14 年前

    在运行时?我仍然对你的要求有点困惑,但我过去做过类似的事情:

    foreach (var order in orders)
    {
        _nhSession.SetReadOnly(order, true); //prevent database updates
    }
    

    前一段时间我这样做是因为当我查询订单列表时,实体上的一些属性在本应为空时不能为空。因此,当nhibernate进行刷新时,它试图更新我的所有订单,并将数据库中为空的几个字段设置为它们的默认C值,例如数据库中的整数字段设置为空将在C中更改为0。

        2
  •  1
  •   Mauricio Scheffer    16 年前

    看一看 this article by Fabio Maulo ,可以将其用作起点,并将其更改为跟踪单个实体。