簡體   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