【问题标题】:Sqlite with multiple NHibernate Session Factories具有多个 NHibernate 会话工厂的 Sqlite
【发布时间】:2011-09-26 16:55:54
【问题描述】:

我有一个问题,我已将我的(工作的)多数据库休眠解决方案切换到 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 sqlite


    【解决方案1】:

    您可能关闭或处置 NHIbernate 会话。内存数据库的范围不是 ISessionFactory。它是 ISession,因此每次您显式关闭它或在“使用”语句中关闭它时,数据库都会消失。

    来自In-Memory Databases

    数据库一旦停止存在 数据库连接已关闭。每个 :memory: 数据库都是不同的 彼此。因此,打开两个数据库连接,每个连接都使用 文件名 ":memory:" 将创建两个独立的内存数据库。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多