ssn*_*ssn 4 sqlite servicestack ormlite-servicestack
我试图在我的单元测试中使用Sqlite作为内存数据库和ServiceStack ORMlite.
如果我用SQLite保存到文件运行我的测试,即.使用connectionstring
"Data Source=|DataDirectory|unittest.db;Version=3;"
Run Code Online (Sandbox Code Playgroud)
,它工作正常,ServiceStacks生成auth表
userRepository.CreateMissingTables();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用此连接字符串将SQLite用作内存数据库时
":memory:"
Run Code Online (Sandbox Code Playgroud)
说的时候我有例外
SQLite error
no such table: UserAuth
Run Code Online (Sandbox Code Playgroud)
我第一次尝试通过这样做来获取用户
userRepository.GetUserAuthByUserName(...)
Run Code Online (Sandbox Code Playgroud)
这是在我调用了userRepository.CreateMissingTables()之后,如果我切换到使用带有文件数据库的SQLite,它就能正常工作.有谁知道问题可能是什么?(由于Ormlite 3.9.4中对ORM lite版本1.0.65.0的错误引用,我不得不降级到ORMLite版本3.9.0)
最新版本的ServiceStack会自动禁用AutoDisposeConnectionSQLite :memory:连接,因此您可以OrmLiteConnectionFactory正常配置,例如:
var dbFactory = new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider);
var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
sqliteRepo.CreateMissingTables();
Run Code Online (Sandbox Code Playgroud)
每当关闭内存数据库中Sqlite的数据库连接时,就会丢失数据库.
因此,当您配置数据库工厂时,您需要告诉它永远不要处理连接,您可以使用autoDisposeConnection构造函数参数,例如:
var dbFactory = new OrmLiteConnectionFactory(":memory:",
autoDisposeConnection:false,
dialectProvider:SqliteDialect.Provider);
var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
sqliteRepo.CreateMissingTables();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |