在autofacc中注册NHibernate会话为SingleInstance

本文关键字:会话 SingleInstance NHibernate 注册 autofacc | 更新日期: 2023-09-27 18:17:20

创建一个NHibernate实例有害处吗?在很少重新启动的windows服务中实现会话?我不是很了解issession,但据我所知,issession实现的实例包含对事务的引用,这些事务可以在我提交更改后立即被处理掉

using (ITransaction trans = MyISession.BeginTransaction())
{
 ...
trans.Commit();
}

当我在线检查代码示例时,使用autofac的实现session几乎总是设置为InstancePerLifetimeScope()。这实际上意味着,一旦实例从创建它的上下文中出来(例如HTTP请求),它就会被处置。

谁能告诉我在autoface中为长时间运行的windows进程注册nhibernate作为单个实例的危害(如果有的话)?

builder.Register(c => new MyIsessionFactory.OpenSession()).As<ISession>().SingleInstance();

在autofacc中注册NHibernate会话为SingleInstance

会话记录所有它加载或引用的实体和集合。

在应用程序的整个生命周期中保持会话打开会导致:

  • 内存使用率极高
  • 极慢的操作(扫描加载的实体列表,这是由许多操作自动完成的,当有太多时需要很长时间)
  • 不可能从错误中恢复,因为会话状态在有一个
  • 时被损坏。