2010-12-06 2 views
0

wpf 응용 프로그램을 데모하기 위해 SQLite 세션을 사용하고 싶습니다. 세션은 이전에 작성되어 db3 테스트 파일에 저장된 테스트 데이터를 사용합니다. 나는 정상적인 테스트에서 사용하는 것과 유사한 코드 인 작업 코드를 사용하여 컨텍스트를 바인딩합니다.배경 스레드에서 생성 후 nhibernate 현재 세션이 손실되었습니다.

여기서 차이점은 세션 팩토리를 만들고 백그라운드 스레드에 테스트 데이터를로드한다는 점입니다. 이 문제가있는 정도까지, 내가 사용하고있는 "thread-static"컨텍스트와 다른 컨텍스트가 있는지 궁금합니다.

문맥 세션이 백그라운드 스레드에서 사용 가능하다는 것을 알 수 있습니다. 코드는 다음과 같습니다. 누구 제안이 있습니까?

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

배경 스레드 코드

상황이 여기에 결합하고, 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를이 세션을 사용할 스레드 배경에 건설된다.

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

갱신

나는이 테스트를로드하는 것과 세션 공장을 건설하는 작업을 분리하여 작동하도록 관리 데이터 파일을 생성하고, 호출 클래스에서 factory reference를 가지고있다. (그리고 나는 약간의 도움이되지 않는 프로세스에서 SQLite 스키마를 생성하지 못했다.)

이것은 데스크톱 응용 프로그램에서 (세션 팩키지를 만들고 백그라운드에서 데이터를 가져 오는) 작업을하고 싶어하는 사람처럼 보입니다. 그래서 나는 여전히 누군가가보다 우아한 해결책을 알고 있기를 바라고 있습니다.

답변

1

현재 세션은 [ThreadStatic] 변수이며 새 스레드에서 사용할 수 없습니까?

관련 문제