System.Data.SQLite 与 Microsoft.Data.Sqlite

田彬郁
2023-12-01

在 2005 年,Robert Simpson 创建了System.Data.SQLite,这是 ADO.NET 2.0 的一个 SQLite 提供程序。

在 2010 年,SQLite 团队接管了项目的维护和开发工作。

同样值得注意的是,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 在内)。

实体框架团队对 System.Data.SQLite 代码库多少有些熟悉。 Brice Lambson 是 EF 团队的成员,之前曾帮助 SQLite 团队添加对实体框架版本 5 和 6 的支持。 另外,Brice 在规划 .NET Core 的同时,还试验了自己的 SQLite ADO.NET 提供程序实现。 经过长时间的讨论,实体框架团队决定基于 Brice 的原型创建 Microsoft.Data.Sqlite。 这将使他们能够创建一种全新的轻量级新式实现方式,它将与 .NET Core 的目标保持一致。

2017 年,.NET Core 2.0 发生了战略变化。 团队确定了与 .NET Framework 的兼容性对于 .NET Core 的成功至关重要。 因此,将许多已删除的 API(包括 DataSet API)都重新添加回来。 就像对其他许多工具所做的一样,这个不受限制的 System.Data.SQLite 也允许将其移植到 .NET Core。 但是,Microsoft.Data.Sqlite 的最初目标是仍保持轻量级的新式特性。 请参阅 ADO.NET 限制,详细了解哪些 ADO.NET API 不是由 Microsoft.Data.Sqlite 实现的。

Microsoft.Data.Sqlite 和 System.Data.SQLite 之间的最大区别是处理数据类型的方式。 如数据类型中所述,Microsoft.Data.Sqlite 不会尝试隐藏 SQLite 的基础奇怪特征,此特征允许将任意字符串指定为列类型,并且只有四个基元类型:INTEGER、REAL、TEXT 和 BLOB。

System.Data.SQLite 将其他语义应用于列类型,从而将它们直接映射到 .NET 类型。 这为提供程序提供了一种更强类型的外观,但它具有一些粗糙的边缘。 例如,它们必须引入一个新的 SQL 语句 (TYPES) 来指定 SELECT 语句中表达式的列类型。

与 System.Data.SQLite 的比较 - Microsoft.Data.Sqlite | Microsoft Learn

 类似资料: