Ошибка DatabaseSchemaUpdater в WP7 - PullRequest
       25

Ошибка DatabaseSchemaUpdater в WP7

4 голосов
/ 11 ноября 2011

Я реализовал некоторую логику управления версиями БД с помощью DatabaseSchemaUpdater и обнаружил одну проблему.

Если я выполню этот код

 updater.DatabaseSchemaVersion = updater.DatabaseSchemaVersion + new Random().Next(10)+1;
 updater.Execute();

и выйдите из приложения кнопкой назад - все в порядке. Версия схемы изменена.

Если я уйду с помощью кнопки Пуск , а затем снова запустите приложение (на мой взгляд, довольно обычный случай для обычного пользователя) - ничего не обновляется. БД имеет предыдущую версию.

вызов Dispose () исправит эту проблему, но мы используем одноэлементный объект DataContext, так что этот подход будет немного хакерским для этого случая.

https://www.dropbox.com/s/wfyvwvjd12wifgl/DBUpdTest.zip - Тестовый проект - вы можете просто запустить приложение, закрыть его различными способами и посмотреть, что произойдет (db ver написано в текстовых полях).

Вопросы: нормально ли это поведение? Деактивирует и запускает приложение снова что-то еще? Есть ли способ обойти такие вещи (кроме утилизации)?

Ответы [ 3 ]

2 голосов
/ 19 июня 2013

У меня была та же проблема в последние пару часов, и я много искал в Google.Единственное решение, которое мне помогло, - это использовать ключевое слово using в контексте базы данных.Непосредственно после этого я воссоздал контекст данных.

// _dataContext is static. By checking for null I make sure that the database
// creation and migration is only done once during the app lifecycle
if (_dataContext == null)
{
    // get the context
    using (_dataContext = new WorkTimesDataContext(IsoStoreDatabasefile))
    {
        // do DB creation
        // do DB migration
    }
    // now that the context is disposed, recreate it
    _dataContext = new WorkTimesDataContext(IsoStoreDatabasefile);
}

Кажется, что база данных не обновляется правильно, когда приложение переходит в состояние захоронения, хотя в официальной документации четко говорится: «Когда этот метод (Выполнить)при вызове все изменения передаются в локальную базу данных в виде одной транзакции , включая обновления версии . "

0 голосов
/ 01 декабря 2011

У меня была та же проблема, потому что у меня была бета-версия WP7 SDK.Это исправило себя, как только я установил не бета-версию.

0 голосов
/ 11 ноября 2011

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

Это крайне необходимо при работе с данными на телефоне Windows. Ссылка ниже должна быть достаточной, чтобы понять, как она работает и как легко внедрить ее в ваше приложение.

Надгробное видео

...