我正在开发一个 Win 8 RT 应用程序,该应用程序必须将一些数据从 Web 服务合并到本地 SQLite 数据库,并且我已经实现了这种方法来仅在事务中更新数据库。
int result;
await MyDatabaseManager.Connection.RunInTransactionAsync(async (connection) =>
{
foreach (Hotel _hotel in listUpdates)
{
result = await connection.UpdateAsync(_hotel);
if (result == 0)
{
await MyDatabaseManager.Connection.InsertAsync(_hotel);
}
}
});
但是,我不知道为什么,当调用 await connection.UpdateAsync(_hotel);
时,它会中断 for bucle,并退出函数而不抛出任何异常或返回任何错误。
如果我评论 RunInTransactionAsync 行,一切正常。
有什么想法吗??
提前致谢。
最佳答案
library you're using没有最好的 async
支持(参见 should I expose asynchronous wrappers for synchronous methods 了解该方法存在缺陷的原因)。
您需要使用 RunInTransactionAsync(Action<SQLiteConnection>)
重载而不是 RunInTransactionAsync (Action<SQLiteAsyncConnection>)
.应该这样做(在升级到最新版本的 sqlite-net 之后):
await MyDatabaseManager.Connection.RunInTransactionAsync((SQLiteConnection connection) =>
{
foreach (Hotel _hotel in listUpdates)
{
result = connection.Update(_hotel);
if (result == 0)
{
connection.Insert(_hotel);
}
}
});
关于c# - Win RT SQLite 事务性插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002034/