2010-12-06 71 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]变量,因此不可用于新线程?