System.Data.SQLite与Microsoft.Data.Sqlite

时间:2018-08-20 14:54:47

标签: .net sqlite system.data.sqlite

System.Data.SQLite和Microsoft.Data.Sqlite有什么区别

我知道System.Data.SQLite较旧,并且在Microsoft.Data.Sqlite之后获得了.NETStandard支持,但是现在它们都支持.NETStandard 2。

一个人比另一个人有什么优势?

3 个答案:

答案 0 :(得分:3)

System.Data.SQLite的一个优点是它是由SQLite团队开发的,该团队已经表示了对保持其支持的长期承诺。

Microsoft.Data.Sqlite的一个优点是它是由Microsoft开发的,可以假定已通过Entitity 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就是最好的例子。 。”

答案 1 :(得分:2)

还有一个发现,截至今天(2020年3月6日),System.Data.SQLite还没有为Linux arm提供编译后的二进制文件。您必须这样做manually

答案 2 :(得分:0)

我在一个项目中使用过,我发现 批量插入时,System.Data.SQLite大约比Microsoft.Data.Sqlite快3倍。