SQLite作为SQL Server的内存数据库

本文关键字:内存 数据库 Server 作为 SQL SQLite | 更新日期: 2023-09-27 17:53:09

我的设置类似于使用内存中的SQLite (http://mikhail.io/2016/02/unit-testing-dapper-repositories/)使用此库测试SQL Server的dapper调用:https://github.com/ServiceStack/ServiceStack.OrmLite

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

例如,我有一个查询,返回页面结果使用偏移和fetch下一个,但SQLite只支持限制和偏移。

如果你对我做内存单元测试有什么建议呢?我没有使用模拟数据库上下文的EF路线,因为dapper性能更高,并且不想使用存储过程,因为我也想测试我的SQL。我不希望模拟我的数据库调用。

SQLite作为SQL Server的内存数据库

Ormlite的类型化API与RDBMS无关,所以只要你坚持使用Ormlite的类型化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();
}

但是如果使用自定义SQL API来执行mssql特定的SQL,您将无法对SQLite执行。您可以利用OrmLite中的可模拟支持,但我个人建议坚持使用OrmLite的RDBMS不可知类型API。