示例#1
0
        /// <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(); }
        }
示例#2
0
        /// <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);
                }
            }
        }
示例#3
0
 protected virtual Task OnUpdate(DBInfo info, DBInfoLocal infoLocal)
 {
     return(Task.Delay(0));
 }