微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐