Sqlite与多个NHibernate会话工厂



我遇到了一个问题,我已经将我的(工作)多数据库nhibernate解决方案切换为DI其会话工厂,以便我可以在集成测试套件中使用SqlLite。

而使用物理文件,我可以使用多个文件名,每个db工作一个(见下面的代码),我不知道如何在内存中使用它。也许这只是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;
    }

您可能会关闭或处置NHIbernate会话。内存数据库的作用域不是ISessionFactory。它是ISession,所以每次你显式关闭它或者在using语句中,数据库就会消失。

From In-Memory Databases:

数据库将停止存在数据库连接关闭。每个:内存:数据库是不同的从其他地方。打开两个数据库连接文件名":memory:"将创建两个独立的内存数据库。

最新更新