2010-12-06 102 views
0

我想使用SQLite會話來演示wpf應用程序;會話使用之前創建並保存到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]變量,因此不可用於新線程?