1

WebサービスからローカルのSQLiteデータベースに一部のデータをマージする必要があるWin8RTアプリに取り組んでおり、このメソッドを実装して、トランザクションのみでデータベースを更新しました。

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行にコメントすると、すべて正常に機能します。

何か案が??

前もって感謝します。

4

1 に答える 1

4

使用しているライブラリにasyncは最適なサポートがありません(アプローチに欠陥がある理由の説明については、同期メソッドの非同期ラッパーを公開する必要がありますを参照してください)。

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);
    }
  }
});
于 2012-08-17T11:12:19.057 に答える