2012-03-01 2 views
2

Мне любопытно, как мы должны работать с SQL Server Compact в нашем исходном управлении Git. Каждый раз, когда разработчик меняет данные, возникает конфликт двоичного слияния. Есть ли способ синхронизировать разработку этой базы данных? Если два разработчика снимут источник и изменят схему, то один из них потеряет свои изменения, поскольку все, что вы действительно можете сделать, это принять версию сервера файла sdf или локальной версии. Что рекомендуется для этого сценария? Преимущество наличия SQL Server CE в решении заключается в том, что люди могут вытащить новую копию проекта, нажмите F5, и они отправятся на гонки. Здесь есть какая-то средняя почва?Как обрабатывать SQL Server CE в исходном управлении?

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

ответ

2

Вместо создания вашей схемы в SDF вы можете писать операторы SQL, которые создают и заполняют базу данных и проверяют их. SQL - это текст и может быть объединен и сравнен с использованием существующих инструментов. Вам понадобится команда pre-build для запуска SQL и воссоздания вашей базы данных.

+0

Вы действительно дали мне представление. Я думаю, что EF-код был бы лучшим решением, поскольку код запускает схему, и теперь у них также есть миграция данных: D – Chev

0

Аналогичная проблема различна, например. пути для различных сред разработки, которые я обычно решаю так:

прилагают имя хоста к ключу, как в:

<add key="ImportPath_MyCoolUbuDev" value="d:\import" /> 
<add key="ImportPath_alexf" value="m:\dev\p1\import" /> 

может быть, это даст вам идею.

Я не знаю, если каждый может сохранить свою собственную копию локально (по-разному) и только перезаписать ее, когда они захотят обновить себя.

2

Я бы обычно подходил к этому так же, как если бы я использовал полномасштабный sql-сервер. Каждый разработчик должен иметь копию своей собственной базы данных, которая не помещается в исходный контроль.

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

Обычно у меня есть компонент проверки работоспособности, который запускается при запуске. Первое, что он делает, это проверить, есть ли база данных ce. Если нет базы данных, она создаст ее и запустит все сценарии, чтобы довести схему до текущей версии. Если есть база данных, она использует механизм для определения текущей версии базы данных (возможно, таблицы версий или версии сборки), а затем запускает скрипты, необходимые для ее получения до последней версии.

0

Я столкнулся с этой проблемой. Ну, замените git на svn и CE стандартным изданием ...

Наша настройка такова, что у каждого разработчика есть своя копия необходимых баз данных с централизованными версиями разработчика, QA и prod. Каждый сервер (примечание: каждый сервер) хранится в репозитории отдельно.

Я использую this code для сценария объектов, а затем пакетных файлов для фиксации репо. В статье рассматривается решение для SVN, вы должны иметь возможность очень легко заменить его соответствующими вызовами git.

Проведите это на ночь на каждой машине с экземпляром базы данных, а ваш дядя Боба. Ура!

Смежные вопросы