system.data.sqlite和microsoft.data.sqlite之间的区别是什么?
我了解System.Data.sqlite比Microsoft.Data.sqlite更老,并且在Microsoft.Data.sqlite之后获得了.NetStandard支持,但现在这两个都支持.NetStandard 2。
一个比另一个有什么好处?
最佳答案
system.data.sqlite的一个优点是,它是由sqlite团队开发的,他们声明了长期致力于支持它。
sqlite的一个优点是它是由Microsoft开发的,可以假定它在EntityFramework,.NET核心等中得到了很好的测试。
我为我的项目选择了system.data.sqlite,一个原因是我使用了getbytes()datareader方法,这在microsoft.data.sqlite中是“不受支持的”。
我还没有测试过性能,但是如果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核心1.0创建的,当时的目标是创建一个更轻、更现代化的.NET版本。NET核心的这一目标在很大程度上被放弃了,取而代之的是添加尽可能多的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就是最好的例子。”