我在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调用我唯一共享代码的东西?我希望我明确表示: - )
答案 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。