/// <summary> /// Полность удаляет файл базы данных с устройства, если она существует /// /// <para>ПОСЛЕ ВЫЗОВА МЕТОДА <see cref="Init(bool)"/> УДАЛЕНИЕ ВЫЗЫВАЕТ <see cref="UnauthorizedAccessException"/></para> /// </summary> /// <returns></returns> public async Task DeleteIfExists() { try { var file = await ApplicationData.Current.LocalFolder.GetFileAsync(Connection.Path); await file.DeleteAsync(StorageDeleteOption.PermanentDelete); } catch (FileNotFoundException) { } finally { await DBInfoLocal.Delete(); } }
/// <summary> /// Производит инициализацию БД. /// Если база не существовала, будет произведено создание. /// Если база уже была создана, будет произведено сравнение версий между локальной базой на устройстве и версии базы в приложении. /// Если локальная версия базы ниже, будет запущен процесс обновления /// </summary> /// <param name="ignoreUpdate">Указывает, что обновление текущей локальной базы не должно выполняться</param> /// <returns></returns> public async Task Init(bool ignoreUpdate = false) { StorageFolder localFolder = ApplicationData.Current.LocalFolder; bool notExists = !(await IsExists()); // Database cannot be created if subdirectories doesn't exist // So we need to check its path (relative/platform-independent) string dbRelDirectory = Path.GetDirectoryName(DBInfoLocal.DB_PATH); if (!string.IsNullOrWhiteSpace(dbRelDirectory)) { await localFolder.CreateFolderAsync(dbRelDirectory, CreationCollisionOption.OpenIfExists); } await Connection.ExecuteAsyncAction(async (asyncConn) => { foreach (ISQLiteDBTable table in Tables) { await table.CreateOrUpdate(asyncConn); } }); Debug.WriteLine($"SQLiteDB -> Init: \n\tFullPath = {Connection.FullPath}"); DBInfo info = await DBInfo.GetInfo(); if (notExists) { DBInfoLocal localInfo = await DBInfoLocal.Create(info.InstalledVersionNumber); Debug.WriteLine($"SQLiteDB -> OnCreate"); await OnCreate(info); } else if (!ignoreUpdate) { DBInfoLocal localInfo = await DBInfoLocal.Get(); if (localInfo.InstalledVersionNumber < info.InstalledVersionNumber) { Debug.WriteLine($"SQLiteDB -> OnUpdate"); await OnUpdate(info, localInfo); } } }
protected virtual Task OnUpdate(DBInfo info, DBInfoLocal infoLocal) { return(Task.Delay(0)); }