Как я могу генерировать таблицы базы данных из C #, чтобы управлять версией базы данных? - PullRequest
4 голосов
/ 15 июля 2010

В настоящее время изменения в базе данных производятся с помощью программы управления SQL Server. Если таблица изменяется, запускается sqlmetal для регенерации классов linqtosql, и разработка продолжается. Однако это усложняет развертывание, поскольку вам необходимо пройти и вручную обновить базу данных развертывания (и любые другие базы данных, используемые в цикле разработки). Было бы неплохо, если бы мы могли использовать C # для генерации этих изменений, поскольку это помогло бы устранить человеческие ошибки и иметь дополнительное преимущество, заключающееся в том, что мы могли сохранить структуру базы данных в git. Прямо сейчас, единственное представление базы данных находится в сгенерированных классах linqtosql.

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

Я видел намеки на возможность создания таких вещей, как генерация баз данных из POCO с использованием как структуры сущностей, так и linqtosql, но мне трудно найти конкретные примеры этого. Кроме того, я не смог обнаружить, есть ли у них изящный (т.е. сохраняющий данные) способ обработки изменений в базе данных после первоначальной генерации таблицы.

Существуют ли проекты, которые решают эту проблему?

Ответы [ 7 ]

5 голосов
/ 15 июля 2010

Существует несколько инструментов, которые помогут вам с миграцией схемы (и данных) вашей базы данных: RikMigrations , Migrator.Net и Machine.Migrations .Надеюсь, что это поможет.

Wizardby выглядит также многообещающе: он предоставляет независимые от базы данных сценарии DDL и автоматизирует миграцию между различными версиями схемы.

2 голосов
/ 15 июля 2010

Похоже, вам нужен такой инструмент, как Migrator.NET для управления миграцией вашей базы данных.Мы используем его по вызову при запуске нашего сайта, чтобы перенести базу данных по мере необходимости для любой конкретной версии.

Я поиграл с идеей создания более чистого интерфейса и когда-нибудь надеюсьприступить к его реализации, но другие приоритеты отодвинули это назад.На данный момент мы используем исходные строки sql в наших миграциях, потому что нет реализации драйвера sybase (кроме очень уродливого хака, который я написал для управления таблицей версий).

2 голосов
/ 15 июля 2010

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

Во-первых,

  1. Создайте свою БД
  2. ИспользуйтеМастер публикации базы данных для публикации базы данных в виде сценария .sql
  3. Добавление номера версии в сценарий
  4. Добавление в решение
  5. Проверка в системе контроля версий.

По мере обновления

  1. Обновление сценария к предыдущей схеме в виде файлов .sql
  2. Добавление номера версии сценария, увеличенного с предыдущей версии
  3. Добавить в ваше решение
  4. Проверка в системе контроля версий.
2 голосов
/ 15 июля 2010

VS2010 может управлять контролем версий в схеме базы данных через проект базы данных.Существуют и другие инструменты для разработки БД, которые предлагают контроль версий, вам нужно найти их, чтобы найти и сравнить цены.

1 голос
/ 21 июля 2010

Хитрость здесь заключается в том, чтобы полагаться на базу данных как на единый источник истины для вашей схемы Linq, а не на сгенерированные классы.
Мы широко используем Linq to SQL в нашем магазине разработчика и работаем следующим образом:
1. Создайте свою базу данных (рабочую копию) из системы контроля версий (базовый уровень).
2. Измените вашу базу данных так, как вам нравится.
3. Сгенерируйте классы Linq to SQL из (рабочей) базы данных.
4. Создайте исправления для обновления вашей базовой базы данных до вашей рабочей копии.
5. Зарегистрируйтесь и поделитесь этими патчами со всеми разработчиками.

Для очень быстрого и простого способа создания баз данных и баз данных рабочей копии попробуйте DBSourceTools. http://dbsourcetools.codeplex.com

Веселись.

1 голос
/ 15 июля 2010

Как дополнение к MadBoy, SQL Packager также может запускать пакет как проект C #.

Red-Gate SQL Compare также отлично, и, как указывают некоторые из баннеров на SO, также есть новый SQL Source Control .

Тогда у них есть SDK SQL Comparison SDK .

1 голос
/ 15 июля 2010

Redgate программное обеспечение предлагает то, что может быть действительно полезным для вас. Он называется SQL Packager и отлично справляется со своей задачей.

Особенности:

  • Простое развертывание обновлений базы данных на клиентской базе
  • Сценарий и сжатие вашей схемы и данных точно и быстро
  • Упакуйте любой существующий сценарий SQL как .exe или запустите как проект C #
  • Упрощение развертываний и обновлений для SQL Server 2000, 2005 и 2008

Они также предлагают Контроль исходного кода SQL , который также может быть полезен для удобства и простоты.

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