我正在尝试在单元测试中使用Sqlite作为内存数据库和ServiceStack ORMlite。
如果我使用SQLite保存到文件运行我的测试,即。使用connectionstring
"Data Source=|DataDirectory|unittest.db;Version=3;"
,它工作正常,ServiceStacks
生成auth表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版本)
答案 0 :(得分:5)
ServiceStack的最新版本会自动禁用SQLite AutoDisposeConnection
连接的:memory:
,因此您可以正常配置OrmLiteConnectionFactory
,例如:
var dbFactory = new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider);
var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
sqliteRepo.CreateMissingTables();
每当您关闭内存数据库中Sqlite的数据库连接时,就会丢失数据库。
因此,当您配置数据库工厂时,您需要告诉它永远不要处理连接,您可以使用autoDisposeConnection
构造函数参数进行处理,例如:
var dbFactory = new OrmLiteConnectionFactory(":memory:",
autoDisposeConnection:false,
dialectProvider:SqliteDialect.Provider);
var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
sqliteRepo.CreateMissingTables();