8

我正在编写一个需要在 iOS、Android、Windows Phone、WPF、Windows 8 Metro、Linux 和 Mac 上运行的应用程序。我在跨平台领域拥有大约 95% 的代码,但 UI 和某些东西显然需要针对每个平台进行专门编码。

现在,我们需要在应用程序中添加一些非常简单的数据库支持,我很想在我的代码中使用跨平台领域的 Sqlite。这可以使用任何现有的 Sqlite 包装器完成,还是我需要创建自己的?或者我应该使用几个具有相同语法的 Sqlite 包装器,并且只从我的不同 csproj 文件(每个平台)中引用不同的库?

我已阅读此 Q/A SQLite 是否有 .NET/C# 包装器?但是经过一个小时的阅读,我仍然不确定如何在所有这些平台上运行,所以我认为有人可能在我之前就已经考虑过这些事情。

4

2 回答 2

4

使用 SQLite 进行跨平台 .NET/C# 开发的一些选项是:

SQLitePCL.raw

用于对 SQLite 进行低级(原始)访问的可移植类库 (PCL)

SQLitePCL.raw 在 SQLite C API 之上提供了一个非常薄的 C# 包装器。SQLitePCL.raw 公开的 API 从应用程序开发人员的角度来看是敌对的,但被设计为用作可以构建更友好包装器的通用可移植层。

许可证:Apache 许可证 v2

源代码https ://github.com/ericsink/SQLitePCL.raw

Nugethttps ://www.nuget.org/packages/SQLitePCLRaw.core

平台:Xamarin.Android、Xamarin.iOS、UWP、Windows Phone 8.1、.NET 4.5、.NET 4.0、.NET 3.5、Linux、MacOS、NetStandard 1.1、Windows Phone 8(有限制)、Windows Phone 8.1 Silverlight(有限制)


SQLitePCL.pretty

SQLitePCL.raw 上的漂亮面孔

该库使用友好的 C# 面向对象 API 包装了 SQLitePCL.raw 提供的 C like SQLiteAPI。SQLitePCL.pretty 具有广泛的单元测试覆盖率,并支持最新 SQLite 版本中提供的许多新功能。

许可证:Apache 许可证 v2

源代码https ://github.com/bordoley/SQLitePCL.pretty

Nugethttps ://www.nuget.org/packages/SQLitePCL.pretty

平台:与 SQLitePCL.raw 相同


SQLite 网络

简单、强大、跨平台的 SQLite 客户端和 .NET 的 ORM

SQLite-net 被设计为一个快速方便的数据库层。很容易与现有项目集成并在所有 .NET 平台上运行,使用非常简单的方法来安全地执行 CRUD 操作和查询(使用参数)并以强类型方式检索这些查询的结果。

许可证:麻省理工学院许可证

源代码https ://github.com/praeclarum/sqlite-net

Nugethttps ://www.nuget.org/packages/sqlite-net-pcl

平台:与 SQLitePCL.raw 相同


Microsoft.Data.Sqlite

System.Data.Common 接口的 SQLite 实现

该项目是 ASP.NET Core 的一部分,由 Microsoft 维护

许可证:Apache 许可证 v2

源代码https ://github.com/aspnet/Microsoft.Data.Sqlite

Nugethttps ://www.nuget.org/packages/Microsoft.Data.SQLite

平台:.NET Framework、Mono、.NET Core(.NET Native、CoreCLR、Windows Universal)、Xamarin(计划中)

于 2016-11-15T17:28:07.030 回答
1

我建议使用 SQLite 包装器的 Mono 版本 (http://www.mono-project.com/SQLite)。包装器本身完全用托管代码编写,您只需要为各自的环境提供 Sqlite 库。

通过这样做,我有一个在 linux 和 windows 上运行的 C# 项目。

您可能能够摆脱使用官方 C# 包装器(http://system.data.sqlite.org/),但我不确定它如何处理多个平台。

于 2012-10-22T20:49:36.527 回答