【问题标题】:ServiceStack OrmLite using Sqlite64 as memory database results in missing auth tablesServiceStack OrmLite 使用 Sqlite64 作为内存数据库导致丢失 auth 表
【发布时间】:2012-08-14 05:41:14
【问题描述】:

我试图在我的单元测试中使用 Sqlite 作为带有 ServiceStack ORMlite 的内存数据库。

如果我使用 SQLite 保存到文件来运行测试,即。使用连接字符串

"Data Source=|DataDirectory|unittest.db;Version=3;"

,它可以正常工作,并且由 ServiceStacks 生成身份验证表

userRepository.CreateMissingTables(); 

但是,当我尝试通过使用此连接字符串将 SQLite 用作内存数据库时

":memory:"

我说的时候出现异常

SQLite error
no such table: UserAuth

我第一次尝试通过这样做来获取用户

userRepository.GetUserAuthByUserName(...)

这是在我调用 userRepository.CreateMissingTables() 之后,如果我切换到使用带有文件数据库的 SQLite,它工作正常。有谁知道问题可能是什么? (由于在 Ormlite 3.9.4 中对 ORM lite 版本 1.0.65.0 的错误引用,我不得不降级到 ORMLite 版本 3.9.0)

【问题讨论】:

    标签: sqlite servicestack ormlite-servicestack


    【解决方案1】:

    ServiceStack v5

    ServiceStack 的最新版本自动为 SQLite :memory: 连接禁用 AutoDisposeConnection,因此您可以正常配置您的 OrmLiteConnectionFactory,例如:

    var dbFactory = new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider);
    
    var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
    sqliteRepo.CreateMissingTables();
    

    ServiceStack v3

    每当您关闭内存数据库中的 Sqlite 的数据库连接时,您的数据库就会丢失。

    因此,当您配置 DB Factory 时,您需要告诉它永远不要释放连接,您可以使用 autoDisposeConnection 构造函数参数来执行此操作,例如:

    var dbFactory = new OrmLiteConnectionFactory(":memory:", 
        autoDisposeConnection:false, 
        dialectProvider:SqliteDialect.Provider);
    
    var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
    sqliteRepo.CreateMissingTables();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2019-01-07
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多