6

我有一个打开的Castle ActiveRecord SessionScope。 我需要使用包装到SessionScope中的nhibernate会话。如何从Castle ActiveRecord检索当前NHibernate会话对象SessionScope

如何从SessionScope中检索当前NHibernate会话对象?

非常感谢您的答复。

[更新] 我有这样的代码

ISession session = SessionScope.Current.GetSession(); 

,但我不知道该怎么传递到的getSession参数

回答

0

我认为ActiveRecord的SessionScope可以处理不同类型的多个工厂,但如果你没有利用这一点,我认为你会很好地通过任何类型的持久教育:

ISession session = SessionScope.Current.GetSession(typeof (YourClass)); 
+0

谢谢@jishi但我有这个错误:关键不在集合中。 – manuellt

+0

您是否在Windsor使用ActiveRecordFacility? – jishi

+0

谢谢@jishi,我没有使用Windsor的ActiveRecordFacility,但我尝试了一个解决方案,我测试了它,并没有问题。再次感谢你。 – manuellt

9

我r解决它与此代码:

 ISessionFactoryHolder holder = ActiveRecordMediator.GetSessionFactoryHolder(); 
     ISessionScope activeScope = holder.ThreadScopeInfo.GetRegisteredScope(); 
     ISession session = null; 
     var key = holder.GetSessionFactory(typeof(ActiveRecordBase)); 
     if (activeScope == null) 
     { 
      session = holder.CreateSession(typeof(ActiveRecordBase)); 
     } 
     else 
     { 
      if (activeScope.IsKeyKnown(key)) 
       session = activeScope.GetSession(key); 
      else 
       session = holder.GetSessionFactory(typeof(ActiveRecordBase)).OpenSession(); 
     } 
相关问题