NHibernate StateLessSession vs DefaultReadOnly

时间:2016-03-08 10:05:40

标签: nhibernate

在NHibernate中,有什么区别:

using(var session = _sessionFactory.OpenStatelessSession()) {
    //Do Work
}

using(var session = _sessionFactory.OpenSession()) {
    session.DefaultReadOnly = true;
    //Do Work
    session.DefaultReadOnly = false;
}

我只希望某些情境中的某些实体成为无国籍而其他实体则无国籍。我可以使用两个会话(一个statefull和一个无状态)或将我想要无状态的查询包装到DefaultReadOnly - 调用。

1 个答案:

答案 0 :(得分:2)

DefaultReadOnly设置为true只表示NHibernate不会跟踪实体属性,也不会更新数据库上的实体(至少sometimes)。它仍然会将实体保留在其会话缓存中。无状态会话首先不会跟踪其实体,从而节省了一些内存。

如果您只关注readonly,那么您可以使用单个会话DefaultReadOnly = true。但是如果你希望NHibernate在加载一个实体时不使用它的会话缓存(例如,从5分钟前获取数据库中的当前数据,而不是会话缓存中的数据),那么你就会更好地服务于无状态会话。