FluentNHibernate并且不识别会话

时间:2009-06-23 21:52:27

标签: nhibernate

出于某种原因,当我尝试访问会话时,Nhibernate会出现问题。抛出以下异常:

没有配置CurrentSessionContext(设置属性current_session_context_class)!

请注意我没有使用XML来设置配置!

我在测试中打开会话:

 [SetUp]
        public void Initialize()
        {
             _session = GetSessionFactory().OpenSession(); 
            _transaction = _session.BeginTransaction();

            SetupContext(); 
            When(); 
        }

然后我使用Repository访问当前会话。存储库位于不同的dll中。

public void Save(Category newCategory)
        {
            var session = SessionFactory.GetSession(); 
            session.SaveOrUpdate(newCategory);
        }





  public static ISession GetSession()
        {
            var session = _sessionFactory.GetCurrentSession(); 

            if (session == null)
                return _sessionFactory.OpenSession();

            return session; 
        }

更新:

在我的BaseTest.cs课程中,我也有一个拆解:

[TearDown中]     public void CleanUp()     {         _session.Dispose();         _transaction.Dispose();     }

在调试期间,似乎正在触发CleanUp并杀死_session对象!

另一个更新:我在构建配置时添加了以下代码:

public static ISessionFactory CreateSessionFactory()
        {
             _sessionFactory = 
                Fluently.Configure().Database(
                    MsSqlConfiguration.MsSql2000.ConnectionString(
                        c => c.FromConnectionStringWithKey("ConnectionString")))
                        .Mappings(m =>  
      m.FluentMappings.AddFromAssemblyOf<Category>())
      **.ExposeConfiguration(x =>
      {
          x.SetProperty("current_session_context_class",
  "thread_static");
      })**
      .BuildSessionFactory();

            return _sessionFactory; 
        }

现在我收到以下错误:

没有会话绑定到当前上下文

1 个答案:

答案 0 :(得分:2)

您需要将会话绑定到当前上下文。

setup方法中:

var session = SessionFactory.OpenSession();
CurrentSessionContext.Bind(session);

teardown方法中:

var session = CurrentSessionContext.Unbind(SessionFactory);
session.Dispose();