Nhibernate 不处理这个问题不好吗

Nhibernate 不处理这个问题不好吗,nhibernate,Nhibernate,我已经在我的asp.net mvc应用程序中连接了NHibernate ISession被注入到存储库中。 我不能使用每请求会话模式,因为我需要每会话会话一次 NHibernate会话用于多个http请求。对象图很大,我不想在每个请求中加载整个图。这就是ISession存储在users HttpSession中的原因 ISession的生命周期使用StructureMap配置: For<ISession>().LifecycleIs(new HttpSessionLifecycle(

我已经在我的asp.net mvc应用程序中连接了NHibernate

ISession被注入到存储库中。 我不能使用每请求会话模式,因为我需要每会话会话一次

NHibernate会话用于多个http请求。对象图很大,我不想在每个请求中加载整个图。这就是ISession存储在users HttpSession中的原因

ISession的生命周期使用StructureMap配置:

For<ISession>().LifecycleIs(new HttpSessionLifecycle()).Use(x =>
{
    var sessionSource = x.GetInstance<ISessionSource>();
    return sessionSource.CreateSession();
});
清除会话

当用户创建一个新会话时,StructureMap会创建一个新会话。 我没有找到一个处理这个问题的方法

那么不处理它是不是很糟糕?
这是否保持了与数据库的连接?

通常,NHibernate不会保持与数据库的打开连接的时间超过它需要的时间。它使用SQL Server连接池快速获取连接并返回它们。因此,就开放连接而言,不处理会话不是问题


但会话还跟踪实体中的所有更改,并在dispose/commit事务中刷新它们。请记住,此功能存在,可能会困扰您。请注意以下问题:


在某些情况下(如果不使用事务或经常执行事务回滚),长时间会话可能会“消耗”大量内存。但当会话被GC释放和收集时,所有分配的内存都将被释放。

如果它没有实现IDisposable,那么。。。那么就没有Dispose()了,处理它就没有意义了。医生怎么说?ISession是一次性的,作为一种最佳实践,它应该被处理掉。但是我的应用程序中的ISession必须跨多个页面请求。如果您说您不能使用每个请求会话模式,因为您需要每个会话模式,那么您的意思是要跨同一用户的多个http请求保持会话吗?如果您能更多地解释您的用例,那么理解您的问题将是有帮助的。谢谢。是否可以将对象图拆离并保存在web会话中?对象图实际上保存在web会话中,但未拆离。我没有与nhibernate分离/连接的经验,但已阅读,如有可能,应省略。
Session.Clear()