Обновление схемы базы данных с помощью Entity Framework Code First

Entity Framework Code First — отличная платформа для разработки новых проектов. Но как насчет расширения существующей базы данных?

Например, что, если я просто хочу добавить дополнительное свойство к существующему объекту данных? Есть ли какой-либо способ сделать это «сначала код» или мне придется добавить столбец базы данных вручную с помощью SQL Server Management Studio или аналогичного инструмента?

Все, что я нашел до сих пор, это как восстановить всю базу данных с нуля при изменении схемы, но я не хочу терять свои данные.

Если я не ошибаюсь, для Ruby on Rails есть инструмент, который может генерировать SQL-скрипт, отражающий новые изменения базы данных. Есть ли способ сделать это и в EF Code First?


person Adrian Grigore    schedule 13.04.2011    source источник
comment
Если у вас есть какие-либо значительные данные, которые вы не хотите потерять... Я бы сказал, используйте первую модель схемы. Это не вариант? Помимо того, что dba недоступен ... какие преимущества вы получите от использования кода в первую очередь? Просветите пожалуйста....   -  person sam yi    schedule 14.11.2013
comment
@sam yi: Спустя два года после написания этого поста я склонен согласиться с вашим комментарием — хотя подход, основанный на коде, по-прежнему кажется привлекательным с точки зрения разработчика. Гораздо проще просто добавить свойство в класс, чем возиться с командами SQL и потом генерировать обновления моих классов EF.   -  person Adrian Grigore    schedule 15.11.2013


Ответы (4)


В настоящее время я использую библиотеку EntityFramework.Migrations, которая решает проблему развития схемы БД. Он работает, создавая классы миграции, которые генерируют сценарии SQL для обновления вашей схемы.

В настоящее время он все еще находится в бета-версии, но я нашел его полезным. К сожалению, вам все равно придется создавать сценарии переноса данных.

Дополнительную информацию можно найти здесь.

person Community    schedule 03.01.2012

К сожалению нет. В настоящее время нет способов поэтапного создания базы данных в EF code-first. ADO.NET команда описала некоторый подход, над которым они работают, но эти инструменты еще не опубликованы. Единственный способ - использовать базу данных или первый подход к модели. Это означает, что вы можете напрямую смоделировать свои изменения в базе данных и продолжить кодирование, или вы можете использовать модель EDMX и Power Pack для создания баз данных для постепенного создания базы данных. Вы по-прежнему можете сгенерировать DbContext из EDMX с помощью нового шаблона T4, добавленного в EF 4.1, но вы потеряете способ определения классов сущностей (они будут созданы с помощью шаблона).

person Ladislav Mrnka    schedule 14.04.2011

В данный момент работаю над похожей проблемой.

Я использую первый подход EF Model. Я использую проект базы данных, который генерируется sql EF.

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

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

Я еще не закончил доработку своего решения (изменение SsdlToSql10.tt, которое ef использует для создания sql. Делая его более удобным для проектов баз данных!).

person David Rose    schedule 19.07.2011
comment
Спасибо за совет. Я использую инструмент сравнения схем базы данных Visual Studio для создания миграции схемы, когда мне нужно развернуть новую версию. Он отлично работает, но хотелось бы более автоматизированного решения. Я посмотрю проекты баз данных, если у меня будет время, это звучит интересно. - person Adrian Grigore; 19.07.2011

В Visual Studio есть инструмент сравнения схем. После изменения кода вы можете создать базу данных, а затем использовать Schema Compare для инкрементного изменения проекта вашей базы данных или другой базы данных.

person mihanik    schedule 19.03.2012
comment
Спасибо за предложение. Это именно то, что я делаю прямо сейчас. Это работает, но я искал что-то более тесно интегрированное с EF. EF.Migrations — это именно то, что я искал. - person Adrian Grigore; 20.03.2012