使用Sqlite64作为内存数据库的ServiceStack OrmLite导致缺少auth表

使用Sqlite64作为内存数据库的ServiceStack OrmLite导致缺少auth表,第1张

概述我试图在我的单元测试中使用Sqlite作为内存数据库和ServiceStack ORMlite. 如果我用SQLite保存到文件运行我的测试,即.使用connectionstring "Data Source=|DataDirectory|unittest.db;Version=3;" ,它工作正常,ServiceStacks生成auth表 userRepository.CreateMissing 我试图在我的单元测试中使用sqlite作为内存数据库和ServiceStack Ormlite.

如果我用sqlite保存到文件运行我的测试,即.使用connectionstring

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

,它工作正常,ServiceStacks生成auth表

userRepository.CreateMissingtables();

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

":memory:"

说的时候我有例外

sqlite errorno such table: UserAuth

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

userRepository.GetUserAuthByUser@R_403_6889@(...)

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

解决方法 ServiceStack v5

最新版本的ServiceStack会自动禁用sqlite的autodisposeConnection:memory:connections,因此您可以正常配置OrmliteConnectionFactory,例如:

var dbFactory = new OrmliteConnectionFactory(":memory:",sqliteDialect.ProvIDer);var sqliteRepo = new OrmliteAuthRepository(dbFactory);sqliteRepo.CreateMissingtables();

ServiceStack v3

每当关闭内存数据库中sqlite的数据库连接时,就会丢失数据库.

因此,当您配置数据库工厂时,您需要告诉它永远不要处理连接,您可以使用autodisposeConnection构造函数参数,autodisposeConnection:false,dialectProvIDer:sqliteDialect.ProvIDer);var sqliteRepo = new OrmliteAuthRepository(dbFactory);sqliteRepo.CreateMissingtables(); 总结

以上是内存溢出为你收集整理的使用Sqlite64作为内存数据库的ServiceStack OrmLite导致缺少auth表全部内容,希望文章能够帮你解决使用Sqlite64作为内存数据库的ServiceStack OrmLite导致缺少auth表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1150203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存