NHibernate 会话未关闭
NHibernate session Is not getting Closed
我有一个安装了以下库的 MVC 应用程序。
- Autofac
- 休眠
我有一个错误,请求完成后会话没有关闭。我在 SQL 数据库中有多个会话,但是其中 none 个正在关闭。
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...
}
我遇到的问题是,每次调用任何服务都会生成 sql 会话,我可以调用数据库,但是它没有得到正确处理,尽管 BaseRepository class 有一个一次性方法可以刷新会话并正确关闭它们。
如何让 autofac 正确安全地关闭会话?
假设您正在使用 Autofac.Mvc 集成库,您应该使用 InstancePerRequest 注册您的会话。目前您正在注册 PerLifetimeScope,这是不正确的。
我有一个安装了以下库的 MVC 应用程序。
- Autofac
- 休眠
我有一个错误,请求完成后会话没有关闭。我在 SQL 数据库中有多个会话,但是其中 none 个正在关闭。
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...
}
我遇到的问题是,每次调用任何服务都会生成 sql 会话,我可以调用数据库,但是它没有得到正确处理,尽管 BaseRepository class 有一个一次性方法可以刷新会话并正确关闭它们。
如何让 autofac 正确安全地关闭会话?
假设您正在使用 Autofac.Mvc 集成库,您应该使用 InstancePerRequest 注册您的会话。目前您正在注册 PerLifetimeScope,这是不正确的。