[英]NHibernate session closing unexpectedly
我为我的Web应用程序使用了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());
每个请求应该一次会话吗?
还有什么方法,或者在其他地方可以找到问题? 我很困。
几分钟后当然解决了这个问题,但答案让我大开眼界。
这个答案使我走上了正确的道路。
虽然我所有的存储库,管理器和其他层都使用Castle Windsor进行了正确的生活方式安装,但其中没有一个。
我正在从ActionFilter进行存储库调用,我所有的动作过滤器都是通过ActionInvoker类调用的,该类被错误地注册为Singleton,这导致了我的错误。
container.Register(Component.For<IActionInvoker>()
.ImplementedBy<WindsorActionInvoker>()
.LifeStyle.***Singleton***);
当然应该
container.Register(Component.For<IActionInvoker>()
.ImplementedBy<WindsorActionInvoker>()
.LifeStyle.Transient);
另一个提醒是要更加注意那些生活方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.