bsa*_*gal 12 .net sqlite system.data.sqlite
System.Data.SQLite和Microsoft.Data.Sqlite有什么区别?
我知道System.Data.SQLite较旧,并且在Microsoft.Data.Sqlite之后获得了.NETStandard支持,但是现在它们都支持.NETStandard 2。
一个相对于另一个的优点是什么?
use*_*562 14
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子句中的表达式)。仅支持四种基本类型(INTEGER,REAL,TEXT和BLOB),并以帮助您在这些和.NET类型之间强制转换值的方式实现ADO.NET API。
“最后,我们不是10年前写的。:-)这使我们可以创建更现代的API,使它们在现代的,惯用的C#中感觉更自然。注册用户定义函数的API就是最好的例子。”
shi*_*ine 12
我在一个项目中尝试过 System.Data.SQLite 和 Microsoft.Data.SQLite,我做了一个真实世界的性能测试,System.Data.SQLite 在批量插入时比 Microsoft.Data.Sqlite 快大约 3 倍。
其他要点
Microsoft.Data.SQLite.NET 运行时本身也不支持,因此这里没有优势。您仍然需要将额外的 .dll 附加到您的项目中(对于 MS 版本,还需要附加更多 .dll)System.Data.SQLite,来自 sqlite.org,它更新了,有一个真实的Standard 2.1版本,但Microsoft.Data.SQLite仍然是Standard 2.0(根据 2022 年 9 月)System.Data.SQLite具有较少的依赖性,仅MS Visual C++ Redistributable. 而Microsoft.Data.SQLite依赖于SQLitePCLRaw.core和Microsoft.Data.Sqlite.Core。更新:
关于 SQLite,我让它听起来比实际更容易,我花了一些时间才弄清楚要使用众多 SQLite 包中的哪一个。但是要手动管理这两个 dll,您需要获取包Stub.System.Data.SQLite.Core.NetStandard,将其提取(例如 7z)并引用托管的System.Data.SQLite.dll,然后附加非托管的(本机)SQLite.Interop.dll。
| 归档时间: |
|
| 查看次数: |
4816 次 |
| 最近记录: |