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