public async Task RunMigrations() { // TODO run migrations in a transaction, otherwise, if and error is found, the app could stay in a horrible state if (settings.DatabaseVersion < migrations.Count) { var connection = new SQLiteAsyncConnection(() => sqlite.GetConnectionWithLock()); while (settings.DatabaseVersion < migrations.Count) { var nextVersion = settings.DatabaseVersion + 1; var success = await migrations[nextVersion - 1].UseConnection(connection).Run(); if (success) { settings.DatabaseVersion = nextVersion; } else { MvxTrace.Error("Migration process stopped after error found at {0}", migrations[nextVersion - 1].GetType().Name); break; } } } }