我想知道是否有办法在运行时使实体的实例不可变。我知道我可以有readonly类型,但我想在运行时只读类型的实例。原因是,我想通过修改属性来使用NH域对象(如轻量级实体),但不希望在执行Session.Flush()或类似操作时这些更改仍然存在。总是有Session.Evict(),但这不会阻止未知的开发人员在“只读”实体上的Session.Save()。
答案 0 :(得分:5)
在运行时嗯?我仍然有点疑惑你的问题,但我过去做过类似的事情:
foreach (var order in orders)
{
_nhSession.SetReadOnly(order, true); //prevent database updates
}
我这样做了一段时间,因为当我查询订单列表时,实体上的某些属性在它们应该存在时不可为空。因此,当NHibernate执行刷新时,它试图更新我的所有订单并将数据库中为空的少数字段设置为其默认C#值,例如数据库中设置为NULL的Integer字段将在C#中更改为0 。
答案 1 :(得分:1)
看看this article by Fabio Maulo,您可以将其作为起点,并将其更改为跟踪单个实体。