C# SQLite作为SQL Server的内存中数据库

C# SQLite作为SQL Server的内存中数据库,c#,sql-server,sqlite,unit-testing,dapper,C#,Sql Server,Sqlite,Unit Testing,Dapper,我的设置与此类似,用于使用内存中的SQLite()测试SQL Server的dapper调用,使用以下库: 我在DAL中使用dapper和ad hoc SQL,希望在不依赖SQL Server的情况下测试数据访问层。我在内存数据库中使用了SQLite。问题是SQL Server和SQLite之间的SQL语法不同 例如,我有一个查询,它使用offset和fetchnext返回分页结果,但SQLite只支持limit和offset 如果您对我进行内存单元测试有什么建议呢?我没有选择模拟db上下文的E

我的设置与此类似,用于使用内存中的SQLite()测试SQL Server的dapper调用,使用以下库:

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

例如,我有一个查询,它使用offset和fetchnext返回分页结果,但SQLite只支持limit和offset


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

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();
}
使用(var db=dbFactory.Open())
{
db.DropAndCreateTable();
插入(新Poco{Name=Name});
var results=db.Select(x=>x.Name==Name);
结果:PrintDump();
}
但是如果使用,您将无法对SQLite执行该操作。您可以使用,但我个人建议使用OrmLite的RDBMS不可知类型API