Sqlite с несколькими фабриками сессий NHibernate - PullRequest
1 голос
/ 26 сентября 2011

У меня проблема в том, что я переключил свое (работающее) решение nhibernate с несколькими базами данных на DI его фабрику сессий, чтобы я мог использовать SqlLite из своего набора интеграционных тестов.

Принимая во внимание использование физического файлагде я могу использовать несколько имен файлов, по одному для каждой базы данных (см. код ниже), я не уверен, как это сделать с ним в памяти.Может быть, это просто ограничение, накладываемое sqlite в памяти?В результате каждый последующий вызов InMemory () перезаписывает существующий, даже если каждая фабрика получает свой собственный ключ в текущем потоке.

public override Configuration BuildSessionFactoryFor(string databaseName, bool showSql, IsolationLevel level)
    {
      Configuration cfg = null;

      var filename = @"c:\temp\{0}-test.db".Substitute(databaseName);
      if (File.Exists(filename)) File.Delete(filename);

      var sqlConfig =
        SQLiteConfiguration.Standard.ShowSql().UsingFile(filename); //.InMemory()

      var sessionFactory = Fluently.Configure()
        .Database(sqlConfig)
        .ProxyFactoryFactory(typeof (ProxyFactoryFactory))
        .Mappings(m =>
                  m.AutoMappings.Add(
                    new AutoPersistenceModelGenerator().GenerateSchema(databaseName)
                    )
        )
        .ExposeConfiguration(c =>
          {
            new SchemaExport(c).Execute(false, true, false);
            cfg = c;
          })
        .BuildSessionFactory();

      NHibernateSession.AddConfiguration(FactoryKeyFor(databaseName), sessionFactory, cfg, null);

      return cfg;
    }

1 Ответ

0 голосов
/ 26 сентября 2011

Вы, вероятно, закрываете или удаляете сессию NHIbernate. Область базы данных в памяти не ISessionFactory. Это ISession, поэтому каждый раз, когда вы закрываете его явно или в операторе 'using', база данных исчезает.

Из Базы данных в памяти :

База данных перестает существовать, как только подключение к базе данных закрыто. Каждый: память: база данных отличается друг от друга. Итак, открытие двух соединений с базой данных, каждое с filename ": memory:" создаст две независимые базы данных в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...