Используемый файл синхронизации

Хочу использовать функцию автосинхронизации в программе менеджера баз данных. Автосинхронизация автоматически загружает файл базы данных в облако, если он был изменен.

Моя проблема в том, что база данных всегда использует файл базы данных, а метод загрузки не может получить доступ к файлу.

Код:

Имя файла main.db

использование в методах вставки и BackgroundUploadAsync

  public static async void InsertToDatabase(object data)
        {

            SQLiteAsyncConnection conn = new SQLiteAsyncConnection("Main.db");
            await conn.InsertAsync(data);//i cant close the file in async methode
        }

  public async static void AutoSync()
{
....

if (file != null)
                    {

                        var progressHandler = new Progress<LiveOperationProgress>(
                            (progress) => { /*pr.Value = progress.ProgressPercentage;*/ });
                        SettingsFlyout1.ctsUpload = new System.Threading.CancellationTokenSource();
                        LiveConnectClient liveClient = new LiveConnectClient(app.Session);

                        await liveClient.BackgroundUploadAsync(result, file.Name, file, OverwriteOption.Overwrite, SettingsFlyout1.ctsUpload.Token, progressHandler);
                    }
}


private async void Button_Click(object sender, RoutedEventArgs e)
        {

    InsertToDatabase(adat);
    AutoSync();//file not found exception,

    }

Спасибо за помощь или любые предложения!

1 ответ

Это не может быть идеальным в пространстве, но вы можете создать два файла базы данных. Один in-use, и один at-rest,

После каждой записи (или набора записей) копируйте in-use над at-rest перед записью каких-либо записей в БД. Возможно, вам потребуется отключиться, а затем снова подключиться после копирования. Это должна быть довольно быстрая операция (намного быстрее, чем загрузка).

Затем, когда вам нужно загрузить, поток с at-rest версия.

Вам понадобятся блокировки для чтения / записи at-rest, но, по крайней мере, вы можете читать / писать на in-use без связи с интернетом.

Другие вопросы по тегам