运行时的NHibernate只读实体

Tre*_*ent 3 nhibernate

我想知道是否有办法在运行时使实体的实例不可变.我知道我可以有readonly类型,但我想在运行时只读类型的实例.原因是,我想通过修改属性来使用NH域对象(如轻量级实体),但是在执行Session.Flush()或类似操作时不希望这些更改持久存在.始终存在Session.Evict(),但这不会阻止未知的开发人员在"只读"实体上的Session.Save().

Ran*_*den 5

在运行时嗯?我仍然有点疑惑你的问题,但我过去做过类似的事情:

foreach (var order in orders)
{
    _nhSession.SetReadOnly(order, true); //prevent database updates
}
Run Code Online (Sandbox Code Playgroud)

我这样做了一段时间,因为当我查询订单列表时,实体上的一些属性在它们应该存在时不能被置为可空.因此,当NHibernate执行刷新时,它试图更新我的所有订单并将数据库中为空的少数字段设置为其默认C#值,例如数据库中设置为NULL的Integer字段将在C#中更改为0 .