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

我的设置类似于使用内存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.

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能