Я хочу использовать сеанс 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(); } }
Когда дао строится на фоне нить сеанс доступен.
==============
обновление
мне удалось получить эту работу, выделив задачу построения сеанса завода от загрузки теста файла данных и хранения заводской ссылки в вызывающем классе (и обнаружил, что я не генерировал схему SQLite в этом процессе, что нисколько не помогло).
Это похоже на довольно распространенную вещь, которую нужно делать (создание фабрики сеансов и получение данных в фоновом режиме) в настольном приложении, поэтому я все еще надеюсь, что кто-то знает более элегантное решение.