【问题标题】:How to share SQLite code between cross platform apps?如何在跨平台应用程序之间共享 SQLite 代码?
【发布时间】:2015-11-04 12:02:27
【问题描述】:

我在 Xamarin Forms 上提出了这个问题,但没有得到答复,这也是我在此处发布此问题的原因。我也阅读了其他相关问题,我认为他们没有我正在寻找的答案。所以我正在学习使用 Xamarin 进行跨平台开发,不幸的是我无法解决一件事。让我在下面更详细地解释它。

我正在制作一个可以在 Android 和 iOS 上运行的天气预报应用程序。现在我知道这两个平台本身都支持 SQLite 数据库,但是为了利用 Xamarin 和 C# 而不是使用它们的原生 SQLite 功能,我将使用 sqlite-net ORM 包。现在,我与自己发生冲突的一点是,Android 有 SQLiteOpenHelper 和 ContentProviders。我不确定,但 iOS 可能有类似的东西。现在,将 sqlite-net ORM 与这些本机功能一起使用的最佳方法是什么,以便我可以共享基本的 SQLite 代码(例如 CRUD 等),同时利用基本的本机功能,例如 Android 的内容提供者。

相反,如果我必须编写单独的代码来管理和查询 Android 和 iOS 上的数据库,那么 API 调用是我唯一共享代码的地方吗?我希望我说清楚了:-)

【问题讨论】:

    标签: c# sqlite xamarin xamarin.ios xamarin.android


    【解决方案1】:

    就个人而言,我使用Sqlite.Net-PCL。它与 SQLite.Net 相同,只是它在 PCL 中工作。这似乎描述了您的情况(因为您没有提到使用 MVVMCross)。 SQLite.Net-PCL 有一个 nuget 包。我还会查看SQLiteNetExtensions,因为它建立在前者的基础上并允许您指定关系和外键。

    通过您的 iOS 和 Android 应用共享的 PCL 中的所有数据访问,您可以在平台之间 100% 重用代码,并且您不必担心不同的 API。我还没有听说过SQLiteOpenHelper,所以我不确定它的作用或者它是否在这些包中可用,但你甚至可能不需要它。

    使用示例:(取自他们的 github 页面)

    var conn = new SQLiteConnection(sqlitePlatform, "foofoo");
    var query = conn.Table<Stock>().Where(v => v.Symbol.StartsWith("A"));
    
    foreach (var stock in query)
        Debug.WriteLine("Stock: " + stock.Symbol);
    

    您可以查看我使用的数据访问的simple implementation。此外,here 是您可以将其与 DI/IoC 连接的地方。

    【讨论】:

    • 第二个 valdetero 的建议。我使用相同的包,唯一特定于平台的代码是将其指向正确的文件位置。
    • 我不确定是否可以使用 SQLite.Net-PCL 库制作 Android 内容提供程序。而且,IMO 内容提供者是任何优秀 Android 应用程序的关键部分。
    【解决方案2】:

    看看MVVMCross SQLite Plugin。它提供本机实现以在 Android、iOS 和 Windows 上获取 SQLiteConnection 的实例。 您可以通过NuGet 登录。

    如果您不知道如何开始使用 MVVMCross,请查看其Wiki

    【讨论】:

    • 让我这样做,如果这是我想要的,我会回来的:-)
    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多