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