gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:06:11 24 4
gpt4 key购买 nike

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

我正在为我的 DAL 使用带有临时 SQL 的 dapper,并希望在不依赖 SQL Server 的情况下测试数据访问层。我使用了 SQLite 内存数据库。问题是 SQL Server 和 SQLite 之间的 SQL 语法不同。

例如,我有一个查询使用 offset 和 fetch next 返回分页结果,但 SQLite 仅支持 limit 和 offset。

如果您对我进行内存单元测试有什么建议怎么办?我没有使用模拟数据库上下文的 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。

关于c# - SQLite 作为 SQL Server 的内存数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com