如何在异步PCL版本的SQLite中使用SQLiteAsyncConnection?

14

我正在使用来自https://github.com/oysteinkrog/SQLite.Net-PCL的Sqlite.net PCL版本。

但是,我无法设置数据库连接。与原始版本不同,SQliteAsyncConnection不接受字符串(指向数据库的路径),而是一个[Func< SQLiteConnectionWithLock>.]2

如何使用它? 一般来说:如何使用这个库?我有一个核心PCL库,从我的iOS、Android和WP8项目中进行所有业务逻辑。我的理解是,我可以把Sqlite-Net Async PCL放到我的PCL库中。但似乎我必须提供一些特定于平台的东西才能使它工作。

2个回答

28

你只需要创建一个返回 SQLiteConnectionWithLock 的函数,并将其传递给 SQLiteAsyncConnection 构造函数即可。

string databasePath = "path";
var connectionFactory = new Func<SQLiteConnectionWithLock>(()=>new SQLiteConnectionWithLock(new SQLitePlatformWinRT(), new SQLiteConnectionString(databasePath, storeDateTimeAsTicks: false)));
var asyncConnection = new SQLiteAsyncConnection(connectionFactory);

1
SQLitePlatformWinRT是从哪里来的?它是单独的包吗?它也适用于WP8吗/有实现吗? - Krumelur
我在你的问题中混淆了WinRT和WP8。在SQLite.Net.Platform.WindowsPhone8.CSharpSqlite命名空间中有SQLitePlatformWP8CSharp - Johnbot
1
谢谢!这真的很难找到。其他地方的所有文档似乎都暗示你可以使用数据库路径创建一个SQLiteAsyncConnection - edthethird
1
同样地,谢谢。这个看起来很有用的库的文档非常不足。 - azarc3
8
如果你的连接工厂不断提供新连接,最终会遇到SQLite繁忙异常...你最好创建一个单一连接,并让连接工厂返回该连接。 - Damian
显示剩余3条评论

2
我也遇到了这个问题。为了满足Johnbot的正确答案,我添加了我如何使用这个库并使其工作的方法。我并没有真正理解NuGet包,所以我手动完成了它。
  1. 下载项目https://github.com/oysteinkrog/SQLite.Net-PCL

  2. 在VS2015中加载解决方案,设置为发布模式,并为以下dll创建:

a) SQLite.Net

b) SQLite.Net.Async

c) SQLite.Net.Platform.WinRT,适用于Windows 10通用应用程序,或您需要的平台。

确保您的项目引用了这些引用。

references

Universal App 的 SQLIte 是从 VS 工具/扩展和更新中安装的。一旦安装,它将与 Visual C++ 2015 一起引用于通用 Windows / 扩展中,后者也是必需的。
祝你好运!

我需要拥有WinRT平台吗?我只想开发面向Android和iOS的应用。 - Chris Clark
时间已经过去,我现在只使用SQlite.Net-PCL,不再使用Sqlite异步调用,但如果需要,会在C#中创建异步函数。对不起,我还没有为IOS和Android编码,希望这可以帮到你; - 27k1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接