.net NHibernate会话未关闭

.net NHibernate会话未关闭,.net,asp.net-mvc,wcf,nhibernate,autofac,.net,Asp.net Mvc,Wcf,Nhibernate,Autofac,我有一个安装了以下库的MVC应用程序 自动传真 亚硝酸铵 我有一个bug,请求完成后会话没有关闭。我在SQL数据库中有多个会话,但是没有一个会话被关闭 public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder) { var config = SessionFactory.ConofigCoreDb(); var factory = SessionFactory.BuildClou

我有一个安装了以下库的MVC应用程序

  • 自动传真
  • 亚硝酸铵
我有一个bug,请求完成后会话没有关闭。我在SQL数据库中有多个会话,但是没有一个会话被关闭

public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder) {
    var config = SessionFactory.ConofigCoreDb();
    var factory = SessionFactory.BuildCloudSQLSessionFactory(config);
    builder.RegisterInstance(config).As<Configuration>().SingleInstance();
    builder.RegisterInstance(factory).As<ISessionFactory>().SingleInstance();
    var session = builder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).As<ISession>().InstancePerLifetimeScope();
    //sql services
    builder.RegisterType<ConsumerManager>().As<IConsumerManager>();
    builder.RegisterType<DefaultLogger>().As<ILogger>();
    builder.RegisterType<SettingsService>().As<ISettingService>();
    // and so on...
}
公共虚拟无效寄存器(ContainerBuilder、ITypeFinder和typeFinder){
var config=SessionFactory.ConofigCoreDb();
var factory=SessionFactory.BuildCloudSQLSessionFactory(配置);
builder.RegisterInstance(config.As().SingleInstance();
builder.RegisterInstance(factory).As().SingleInstance();
var session=builder.Register(x=>x.Resolve().OpenSession()).As().InstancePerLifetimeScope();
//sql服务
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
//等等。。。
}
我遇到的问题是,每次调用任何服务时,都会生成sql会话,我可以调用数据库,但是它没有得到正确的处理,尽管BaseRepository类有一个一次性方法,可以刷新会话并正确地关闭它们


如何让autofac安全地正确关闭会话?

假设您使用的是autofac.Mvc集成库,您应该向InstancePerRequest注册会话。当前您正在注册PerLifetimeScope,这是不正确的。

假设您使用的是Autofac.Mvc集成库,您应该使用InstancePerRequest注册会话。当前您正在注册PerLifetimeScope,这是不正确的。

您是否也在析构函数中处理?是iam~BaseRepository(){CloseSession()}我对Dispose方法执行相同的操作,因为基本存储库也继承了您在析构函数中处理的IDisPobLeare??是iam~BaseRepository(){CloseSession()}我对Dispose方法也这么做,因为基本存储库继承了IDisposabledo,你知道我花了多少天来修复它吗?然后你来这里发布这个天国的答案!!!!!!谢谢,我会记下答案的。脱帽致敬@Alexey ZimarevNo probs,很高兴这有帮助。我有多个MVC、WebAPI、ServiceStack项目,我在任何地方都使用Autofac。我自己被烧了好几次:)你知道我花了多少天修好它吗?然后你来这里发布这个天国的答案!!!!!!谢谢,我会记下答案的。脱帽致敬@Alexey ZimarevNo probs,很高兴这有帮助。我有多个MVC、WebAPI、ServiceStack项目,我在任何地方都使用Autofac。我自己被烧了好几次:)