System.Data.SQLite 與 Microsoft.Data.Sqlite
System.Data.SQLite 和 Microsoft.Data.Sqlite 有什麼區別?
我知道 System.Data.SQLite 較舊,並且在 Microsoft.Data.Sqlite 之後獲得了 .NETStandard 支持,但現在它們都支持 .NETStandard 2。
一個比另一個有什麼優勢?
System.Data.SQLite 的一個優點是它是由 SQLite 團隊開發的,他們表示長期致力於保持它的支持。
Microsoft.Data.Sqlite 的一個優點是它是由 Microsoft 開發的,可以假設它已通過 Entity Framework、.NET Core 等進行了很好的測試。
我為我的項目選擇了 System.Data.SQLite,原因之一是我使用了 Microsoft.Data.Sqlite 中“不支持”的 GetBytes() DataReader 方法。
我沒有測試過性能,但是如果 Microsoft.Data.Sqlite 獲勝,我不會感到驚訝,因為它聲稱是一個更薄的包裝器。見下文。
這裡的 Microsoft.Data.Sqlite 開發人員之一 Brice Lambson 提供了資訊豐富的評論:https ://www.bricelam.net/2018/05/24/microsoft-data-sqlite-2-1.html#comment- 3980760585
他說,
“Microsoft.Data.Sqlite 和 System.Data.SQLite 之間存在三個主要區別。
“首先,我們的目標不是成為功能完整的 ADO.NET 提供商。Microsoft.Data.Sqlite 是為 .NET Core 1.0 創建的,而目標是創建一個更輕量級、現代化的 .NET 版本。這個目標.NET Core 已在很大程度上被放棄,轉而添加盡可能多的 API,以便更容易從其他 .NET 執行時移植。然而,Microsot.Data.Sqlite 的目標仍然只是提供一個基本的 ADO.NET 實現足以支持現代數據訪問框架,如 EF Core、Dapper 等。我們傾向於不為可以使用 SQL 完成的事情添加 API。例如,有關連接字元串關鍵字的 SQL 替代方案,請參閱此評論。
“第二個大區別是我們更接近原生 SQLite 行為。我們不會試圖彌補 SQLite 的任何古怪之處。例如,System.Data.SQLite 將 .NET 語義添加到列類型名稱中。他們甚至必須先解析每個 SQL 語句,然後再將其發送到本機驅動程序以處理自定義 SQL 語句,以指定不直接來自表列的結果的列類型(即 SELECT 子句中的表達式)。相反,我們接受 SQLite 的事實僅支持四種基本類型(INTEGER、REAL、TEXT 和 BLOB)並以幫助您在這些類型和 .NET 類型之間強制轉換值的方式實現 ADO.NET API。
“最後,我們不是在 10 年前編寫的。:-) 這使我們能夠創建更現代的 API,在現代、慣用的 C# 中感覺更自然。用於註冊使用者定義函式的 API 就是最好的例子。”