Локальный кэш данных - Как заставить полную синхронизацию с базой данных? - PullRequest
0 голосов
/ 31 октября 2009

В моем приложении asp.net 3.5 есть локальный кэш данных. Я заметил, что время от времени, особенно при разработке, моя локальная база данных будет не синхронизирована с сервером. Я понимаю, почему, и я могу воспроизвести это с помощью следующих шагов:

1- Start the app
2- Make a change
3- Sync changes with server
4- Start the app again, thus forcing the app to use a new copy of 
the local .SDF file.

Изменения, которые я сделал ранее, очевидно, пропали, но при синхронизации с сервером они не сбрасываются. Я предполагаю, что где-то приложение не обнаруживает, что БД не синхронизирована.

Что мне интересно, так это то, что есть ли способ программно сказать моему приложению выполнить полную синхронизацию с сервером. Кто-нибудь знает?

Ответы [ 3 ]

1 голос
/ 28 декабря 2009

Ответ , полученный мной на форумах Microsoft, может помочь решить вашу проблему.

Если вы обновите соответствующие таблицы, установив для себя первичный ключ, версии записей будут увеличены, и они будут включены в следующую синхронизацию. Вы можете использовать оператор SQL, подобный следующему, чтобы сделать это.

update MyTable set Id = Id;

Обратите внимание, что в вашем сценарии есть несколько отличий.

  1. Вы будете увеличивать версию, а не инициализировать ее, как в моем случае.
  2. Вы будете управлять отслеживанием изменений на сервере, а не в базе данных Compact Edition.

Не испытав его, я думаю, что это решение должно работать для вас - дайте нам знать, как вы поживаете!

0 голосов
/ 24 января 2010

ЕСЛИ параметр Интервал отслеживания изменений в службах SQL слишком мал, вы также пропустите обновления.

например. если он установлен на 2 дня, то происходят изменения, а затем за 3 дня до попытки синхронизации вы пропустите эти изменения.

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

Тогда позвольте синхронизации произойти.

Затем для каждой таблицы, которая не была обновлена ​​синхронизацией, проверьте, превышает ли дата интервал отслеживания изменений назад. Если это так, измените параметр синхронизации для этой таблицы, чтобы завершить загрузку и выполнить синхронизацию снова.

Немного странно, я знаю ...

0 голосов
/ 28 декабря 2009

Как я отмечал в комментарии, я не уверен, почему ваша локальная база данных будет перезаписываться так часто, но если она перезаписывается и не выполняет повторную синхронизацию изменений, которые ранее были отправлены на сервер, то Проблема скорее всего в том, что якоря хранятся на сервере. Несмотря на то, что клиентская база данных «откатилась» до предыдущей версии, сервер не знает об этом и действительно не может это выяснить.

Конечно, это полностью зависит от человека, как на самом деле реализовать логику синхронизации и привязки, поэтому я могу только догадываться о особенностях проблемы, но для ее решения вам необходимо сделать одну из двух вещей:

  • Иметь скрипт, который вы запускаете на сервере, который сбрасывает привязку клиента к идентификатору клиента разработки, который вы используете; или
  • Измените свойства копии сборки («Копировать в выходной каталог») SDF в своем проекте на «Не копировать», чтобы локальная база данных никогда не перезаписывалась.

Надеюсь, это поможет.

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