NHibernate会话意外关闭

时间:2012-11-23 02:40:51

标签: c# asp.net-mvc fluent-nhibernate castle-windsor

我正在为我的网络应用程序使用MVC4,C#,Castle Windsor,fluentnhibernate堆栈,这通常非常有效。

偶尔会出现与nHibernate相关的错误:

  

读取器关闭时无效尝试调用Read。

  

内部连接致命错误。

当我多次接听电话时,这通常会让人头疼。

目前我正在复制它,同时从JQuery做多个ajax。

我怀疑问题在于,我的NHibernate会话管理。

我能想到的唯一一点就是有人使用 相同的 会话,第一个完成并关闭它,然后以下调用无法完整。

由于我的会话处理方式不应该这样:

Kernel.Register(
                Component.For<ISessionFactory>()
                                .UsingFactoryMethod(_ => config.BuildSessionFactory()),
                Component.For<ISession>()
                                .UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession())
                                .LifestylePerWebRequest());

每个请求应该是一个会话吗?

我还能在哪里找到问题?我很困惑。

1 个答案:

答案 0 :(得分:0)

当然,几分钟后解决了这个问题,但答案对我来说是个大开眼界。

This answer让我走上了正确的道路。

虽然使用Castle Windsor安装了所有我的存储库,管理器和其他图层,但有一个不是。

我正在从ActionFilter进行Repository调用,我的所有动作过滤器都是通过一个ActionInvoker类调用的,该类被错误地注册为Singleton,这导致了我的错误。

container.Register(Component.For<IActionInvoker>()
                                    .ImplementedBy<WindsorActionInvoker>()
                                    .LifeStyle.***Singleton***);

当然应该

container.Register(Component.For<IActionInvoker>()
                                    .ImplementedBy<WindsorActionInvoker>()
                                    .LifeStyle.Transient);

再提醒一下,要密切关注那些生活方式。