Можно ли сгенерировать db sql скрипт с Ef4 CodeFirst при сборке? - PullRequest
5 голосов
/ 24 марта 2011

При сборке я хочу автоматически создать сценарий sql для создания новой базы данных. Я планирую использовать этот сценарий, чтобы иметь возможность создать основную базу данных, которую можно сравнить с производственной базой данных, для создания сценария миграции. Я не могу использовать свою БД для разработки, потому что у меня есть ее настройка для использования SqlCE во время разработки.

К сожалению, я не могу найти ничего в API CodeFirst для генерации сценария SQL. Я уверен, что это возможно, потому что модель-первая делает это. Я вижу, что API вызывает мой DbContext для инициализации базы данных, но ничего, что дает мне сценарий для его собственной инициализации.

Я также хочу, чтобы этот скрипт генерировался при сборке. Каков наилучший способ, чтобы это произошло? Я думал о создании шаблона T4 и использовании Chirpy для запуска его при сборке, но мне интересно, есть ли более простое решение.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Для любого, кто все еще ищет;

один вариант - вы можете получить сгенерированный DDL в виде строки и сохранить его в файл;

string sqlscript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript();
2 голосов
/ 24 марта 2011

Нет, сейчас такой возможности нет.В моем варианте это может быть возможно путем создания собственного инициализатора.Инициализатор создаст базу данных и будет использовать объекты управления SQL Server для создания сценариев из базы данных.Но он будет создавать только сценарии на основе текущего сервера базы данных, поэтому в случае SqlCE вы получите сценарии для SqlCE (существуют различия в используемых типах SQL).

Правильный подход в вашем сценарии - установка SQL Server Expressи использовать стандартные функции для инициализации вашей базы данных и этого экземпляра.Затем вы сможете использовать сценарий создания из базы данных или использовать инструменты базы данных Visual Studio 2010 для создания diff.сценарии против вашего производства.

...