繁体   English   中英

SQLite作为SQL Server的内存数据库

[英]SQLite as in-memory database for 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来执行特定于MSSQL的SQL ,则无法对SQLite执行该操作。 您可以使用OrmLite中的可模拟支持 ,但我个人建议坚持使用OrmLite的RDBMS不可知类型的API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM