如何在跨平台应用程序之间共享SQLite代码?

时间:2015-11-04 12:02:27

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

我在Xamarin Forms上提出了这个问题并且没有得到回复,这也是我在这里发布这个问题的原因。此外,我还阅读了其他相关问题,我认为他们没有找到我正在寻找的答案。所以我正在和Xamarin一起学习跨平台开发,不幸的是我无法绕过一件事。让我在下面进一步详细说明。

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

相反,如果我必须编写单独的代码来管理和查询Android和iOS上的数据库而不是API调用我唯一共享代码的东西?我希望我明确表示: - )

2 个答案:

答案 0 :(得分: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连接的地方。

答案 1 :(得分:0)

查看MVVMCross SQLite Plugin。它提供了在Android,iOS和Windows上获取SQLiteConnection实例的本机实现。 你可以进入NuGet

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