加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – SQLite作为SQL Server的内存数据库

发布时间:2020-12-15 21:00:29 所属栏目:百科 来源:网络整理
导读:我的设置类似于使用内存SQLite( http://mikhail.io/2016/02/unit-testing-dapper-repositories/)使用此lib测试SQL Server的dapper调用: https://github.com/ServiceStack/ServiceStack.OrmLite 我正在为我的DAL使用dapper和ad hoc SQL,并希望测试数据访问层
我的设置类似于使用内存SQLite( http://mikhail.io/2016/02/unit-testing-dapper-repositories/)使用此lib测试SQL Server的dapper调用: https://github.com/ServiceStack/ServiceStack.OrmLite

我正在为我的DAL使用dapper和ad hoc SQL,并希望测试数据访问层而不依赖于SQL Server.我使用了SQLite内存数据库.问题是SQL语法和SQLite之间的SQL语法不同.

例如,我有一个查询,使用offset和fetch next返回分页结果,但SQLite仅支持limit和offset.

如果您有任何建议让我在内存单元测试中做什么怎么办?我没有使用模拟db上下文的EF路由,因为dapper性能更高,并且不想使用存储过程,因为我也想测试我的SQL.我不打算模拟我的数据库调用.

解决方法

Ormlite的Typed API与RDBMS无关,因此只要您坚持使用OrmLite的Typed API,您就可以通过更改连接字符串和方言提供程序轻松地在不同数据库之间切换,例如:

//SQL Server
var dbFactory = new OrmLiteConnectionFactory(connectionString,SqlServerDialect.Provider);

//InMemory Sqlite DB
var dbFactory = new OrmLiteConnectionFactory(":memory:",SqliteDialect.Provider);

然后,您可以使用任一数据库来创建,保留和查询POCO,例如:

using (var db = dbFactory.Open())
{
    db.DropAndCreateTable<Poco>();
    db.Insert(new Poco { Name = name });
    var results = db.Select<Poco>(x => x.Name == name);
    results.PrintDump();
}

但是如果使用Custom SQL API’s to execute MSSQL-specific SQL你将无法对SQLite执行.您可以使用mockable support in OrmLite,但我个人建议坚持使用OrmLite的RDBMS不可知类型的API.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读