Обновление схемы базы данных с помощью кода Entity Framework First
Entity Framework Code First - отличная основа для разработки новых проектов. Но как насчет расширения существующей базы данных?
Например, если я просто хочу добавить дополнительное свойство в существующий объект данных? Есть ли какой-либо "код первый" способ сделать это, или мне нужно будет добавить столбец базы данных вручную с помощью SQL Server Management Studio или аналогичного инструмента?
Все, что я нашел до сих пор, - это как восстановить всю базу данных с нуля при изменении схемы, но я не хочу потерять свои данные.
Если я не ошибаюсь, есть инструмент для Ruby on Rails, который может генерировать SQL script, отражающий новые изменения базы данных. Есть ли способ сделать это и в EF Code First?
Ответы
Ответ 1
В настоящее время я использую библиотеку EntityFramework.Migrations, которая решает проблему разработки схемы БД. Он работает над созданием классов миграции, которые генерируют SQL-скрипты для обновления вашей схемы.
В настоящее время он все еще находится в режиме бета-тестирования, но я нашел его полезным. К сожалению, вы все равно должны генерировать сценарии миграции данных.
Вы можете найти дополнительную информацию здесь.
Ответ 2
К сожалению, нет. В настоящее время нет путей постепенного создания базы данных в EF-кодах. Команда ADO.NET описала некоторый подход, над которым они работают, но эти инструменты еще не опубликованы. Единственный способ - использовать подход к базе данных или модели. Это означает, что вы можете самостоятельно моделировать свои изменения в базе данных и продолжать свое кодирование, или вы можете использовать модель EDMX и Power Generation Power Pack для постепенного создания вашей БД, Вы все равно можете генерировать DbContext
из EDMX с помощью нового шаблона T4, добавленного в EF 4.1, но вы потеряете свой путь к определению классов сущностей (они будут созданы шаблоном).
Ответ 3
Я работаю над подобной проблемой на данный момент.
Я использую первый подход EF Model. Я использую проект базы данных, который питается sql EF.
В принципе у меня есть проект базы данных как обычно, но таблица sql - это sql, сгенерированная EF-моделью.
Проекты базы данных FYI способны обрабатывать сценарии изменений в существующих базах данных, не теряя всех ваших данных. Вы можете установить проект db, чтобы предупредить вас, если внесенное изменение вредно для данных и не запускаться в таких случаях.
Я не закончил дорабатывать свое решение (сменив SsdlToSql10.tt, который ef использует для создания sql. Уделение большего внимания проектам базы данных!).
Ответ 4
В Visual Studio есть инструмент Schema Comparison. После изменения кода вы можете сгенерировать базу данных, а затем использовать Schema Compare для инкрементного изменения проекта базы данных или другой базы данных