2005 年,Robert Simpson 建立了 System.Data.SQLite,這是 ADO.NET 2.0 的 SQLite 提供者。 SQLite 小組在 2010 年接管了專案的維護和開發。 值得注意還有,Mono 小組在 2007 年派生了程式碼 Mono.Data.Sqlite。 System.Data.SQLite 由來已久,且已演進為具備 Visual Studio 工具、穩定且功能完備的 ADO.NET 提供者。 新版本會繼續提供與每個 .NET Framework 版本相容的組件,可回溯至 2.0 版甚至 .NET Compact Framework 3.5。
.NET Core 的第一版 (在 2016 年發行) 是單一、輕量型、現代化且跨平台的 .NET 實作。 過時的 API 和具有較新式替代方案的 API 均已特意移除。 ADO.NET 不包含任何 DataSet API (包括 DataTable 和 DataAdapter)。
Entity Framework 小組對於 System.Data.SQLite 程式碼基底有某種程度的了解。 Brice Lambson 是 EF 小組的成員,先前曾協助 SQLite 小組新增 Entity Framework 第 5 版和第 6 版的支援。 Brice 在 .NET Core 規劃期間,也嘗試自行實作 SQLite ADO.NET 提供者。 經過長時間的討論後,Entity Framework 小組決定根據 Brice 的原型建立 Microsoft.Data.Sqlite。 這可讓他們建立新的輕量型、新式實作,以符合 .NET Core 的目標。
以下範例展現了所謂的更現代化的特性,其中的程式碼會在 System.Data.SQLite 和 Microsoft.Data.Sqlite 中建立
使用者定義的函式
。
// System.Data.SQLite
connection.BindFunction(
new SQLiteFunctionAttribute("ceiling", 1, FunctionType.Scalar),
(Func<object[], object>)((object[] args) => Math.Ceiling((double)((object[])args[1])[0])),
null);
// Microsoft.Data.Sqlite
connection.CreateFunction(
"ceiling",
(double arg) => Math.Ceiling(arg));
在 2017 年,.NET Core 2.0 歷經了策略上的變更。 經決議,與 .NET Framework 的相容性被視為 .NET Core 成功的關鍵。 許多已移除的 API (包括 DataSet API) 又都重獲新增。 這個解除封鎖的 System.Data.SQLite 也允許移植到 .NET Core,就像它對許多其他 API 的作用一樣。 不過,Microsoft.Data.Sqlite 追求輕量型和現代化的原始目標,仍維持不變。 若要深入了解 Microsoft.Data.Sqlite 未實作的 ADO.NET API,請參閱 ADO.NET 限制。
當新功能新增至 Microsoft.Data.Sqlite 時,System.Data.SQLite 的設計會被納入考量。 我們盡可能試著減少兩者間的變更,以簡化其間的轉換。
Microsoft.Data.Sqlite 與 System.Data.SQLite 之間的最大差異在於處理資料型別的方式。 如資料型別所說明,Microsoft.Data.Sqlite 具有 SQLite 的潛在特性,而允許將任意字元串指定為資料行型別,且只有四種基本型別:INTEGER、REAL、TEXT 和 BLOB。
System.Data.SQLite 會將其他語意套用至資料行類型,直接將其對應至 .NET 類型。 這為提供者提供了更強型別的風格,但有些未盡完善之處。 例如,他們必須導入新的 SQL 陳述式 (TYPES),以在 SELECT 陳述式中指定資料行型別的運算式。
Microsoft.Data.Sqlite 的連接字串關鍵字要少得多。 下表顯示可改用的替代方案。
Microsoft.Data.Sqlite 沒有任何 API 會公開 SQLite 的授權回呼。 使用問題 #13835 提供關於此功能的意見反應。
資料變更通知
Microsoft.Data.Sqlite 沒有任何 API 會公開 SQLite 的資料變更通知。 使用問題 #13827 提供關於此功能的意見反應。
虛擬資料表模組
Microsoft.Data.Sqlite 沒有任何用來建立虛擬資料表模組的 API。 使用問題 #13823 提供關於此功能的意見反應。
ADO.NET 限制
Dapper 限制
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:https://aka.ms/ContentUserFeedback。
提交並檢視相關的意見反應