2010-12-06 7 views
0

wpfアプリケーションをデモするためにSQLiteセッションを使用したい。セッションは以前に作成され、db3テストファイルに保存されたテストデータを使用します。私はコンテキストをバインドしています。通常のテストで使用しているコードと同じようなコードを使用しています。バックグラウンドスレッドでの作成後に現在のセッションが失われているnhibernate

ここでの違いは、セッションファクトリを構築してテストデータをバックグラウンドスレッドにロードしている可能性が高いことです。これが問題である限り、私が使用している「スレッドスタティック」とは異なるコンテキストが存在するかどうかは疑問です。

コンテキストセッションがバックグラウンドスレッドで利用可能であることがわかります。コードは以下のとおりです。誰にでも提案はありますか?

============

バックグラウンドスレッドコード

コンテキストはここで結合し、そしてGetCurrentSession()が

public SqLiteDataProvider() 
    { 
     lock (padlock) 
     { 
      ... 
      var session = sessionFactory.OpenSession(); 
      CurrentSessionContext.Bind(session); 

      var pathToMother = FileHelper.GetFilePathFromDirectoryName("src", @"mother.db3"); 
      var conn = (SQLiteConnection)sessionFactory.GetCurrentSession().Connection; 
      SQLiteDataLoader.ImportData(conn, pathToMother); 

      _activitySubjectDao = new ActivitySubjectDao(sessionFactory); 
     } 

呼び出されたときに利用可能です= ============

背景作業が終了した後

サム電子ActivitySubjectDaoは、いくつかのデータを見つけることが求められ、それがフィールドアクセスするときに失敗している:

protected ISession _session { get { return _sessionFactory.GetCurrentSession(); } } 

DAOは、セッションが使用可能であるスレッド背景上に構築されます。私は、これはテストをロードすることからセッションファクトリを構築する作業を分離することにより、仕事を得ることに成功し

==============

更新

データファイルを作成し、呼び出し元クラスのファクトリ参照を保持しています(そして、私はこのプロセスでSQLiteスキーマを生成していませんでした。

これは、デスクトップアプリケーションで(セッションファクトリを構築してデータをバックグラウンドで取得する)ことがかなり一般的なようです。だから、誰かがより洗練されたソリューションを知っていることを期待しています。

答えて

1

私は現在のセッションは[ThreadStatic]変数なので、新しいスレッドでは利用できないと思いますか?

関連する問題