NHibernate无状态会话与DefaultReadOnly

NHibernate无状态会话与DefaultReadOnly,nhibernate,Nhibernate,在NHibernate中,以下各项之间的区别是什么: using(var session = _sessionFactory.OpenStatelessSession()) { //Do Work } 及 我只希望某些上下文中的某些实体是无状态的,而其他实体不是。我可以使用两个会话(一个statefull和一个stateless),或者将我想要的无状态查询包装到DefaultReadOnly-调用中。将DefaultReadOnly设置为true只意味着NHibernate不会跟踪实体

在NHibernate中,以下各项之间的区别是什么:

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


我只希望某些上下文中的某些实体是无状态的,而其他实体不是。我可以使用两个会话(一个statefull和一个stateless),或者将我想要的无状态查询包装到
DefaultReadOnly
-调用中。

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

如果您只关心readonly,那么您可能只需要一个会话,并且
DefaultReadOnly=true
。但如果您希望NHibernate在加载实体时不使用其会话缓存(例如,从数据库获取当前数据,而不是5分钟前会话缓存中的数据),则最好使用无状态会话

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