2009-06-23 9 views
0

何らかの理由で、セッションにアクセスしようとするとNhibernateが孤立してしまいます。FluentNHibernateとセッションを認識しない

CurrentSessionContextは設定されていません(current_session_context_classプロパティを設定してください)。

私は構成をセットアップするためにXMLを使用していません。

私は私のテストでセッションを開いています:

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

      SetupContext(); 
      When(); 
     } 

そして私は、現在のセッションにアクセスするためのリポジトリを使用しています。リポジトリは別の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; 
     } 

UPDATE:私BaseTest.csクラスで

Iはまた、ティアダウンを持っている:

[TEARDOWN] 公共ボイドクリーンアップ(){ _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; 
     } 

今、私は次のエラーを取得:

+0

これは解決したのですか? – DevelopingChris

答えて

2

は、あなたがする必要がある現在のコンテキストにバインド

ないセッションをセッションを現在のコンテキストにバインドします。

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

そしてteardown方法で

は:: setup方法で

var session = CurrentSessionContext.Unbind(SessionFactory); 
session.Dispose(); 
関連する問題