Миграция базы данных для Entity Framework 4 - PullRequest
13 голосов
/ 04 февраля 2010

Я играл с Entity Framework 4, используя подход, основанный на моделях, для генерации сценария базы данных из моих сущностей. Это здорово, но я не уверен, как это работает, когда дело доходит до управления версиями базы данных. Я предполагаю, что если бы я хотел использовать активную среду миграции типов записей, мне пришлось бы работать наоборот и генерировать свои объекты из моей базы данных? Есть ли способ использовать модельно-ориентированный подход и правильно настроить версию базы данных?

Ответы [ 5 ]

16 голосов
/ 20 мая 2011

Это будет в ближайшее время, как пакет NuGet с именем EntityFramework.Migrations

Демонстрация была выполнена Скоттом Хансельманом на TechEd 2011 (доступна онлайн на http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV349). Соответствующий раздел занимает 45 минут.

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

migrate -script

ОБНОВЛЕНИЕ (13 ноября 2011 г.)

Альфа-3-версия этого пакета теперь доступна на NuGet. Вместо того, чтобы использовать командлет migrate -script, упомянутый выше, он использует командлет Add-Migration <migrationname>. пошаговое руководство по его использованию можно найти в блоге команды ADO.NET.

ОБНОВЛЕНИЕ (14 февраля 2012 г.)

Эта функциональность теперь доступна как часть основного пакета EntityFramework NuGet , начиная с версии 4.3. обновленный обзор с использованием EF 4.3 можно найти в блоге команды ADO.NET.

2 голосов
/ 11 марта 2010

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

1 голос
/ 08 апреля 2011

ScottGu упоминает что-то об этом в записи в блоге :

В будущем мы также будем поддерживать функцию «миграции» с EF, которая позволит вамавтоматизировать / выполнить сценарий миграции базы данных программным способом.

[EDIT]

Я думаю, что он может ссылаться на блок создания базы данных Entity Designer , на который ответилМортеза Манави в другой SO ответ .

0 голосов
/ 15 декабря 2011

Я работаю над альтернативой библиотеке EF.Migrations - EntityFramework.SchemaCompare . Это позволяет физически сравнивать схему БД с моделью сущностей, представляющей контекст базы данных (EF.Migrations не делает этого). Это может быть запущено либо во время инициализации базы данных, либо вручную по запросу. Рассмотрим следующий пример

#if DEBUG
Database.SetInitializer(new CheckCompatibilityWithModel<DatabaseContext>());
#endif

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

using (var ctx = new DatabaseContext())
{
    var issues = ctx.Database.FindCompatibilityIssues();
}

Затем, имея на руках эти различия / проблемы несовместимости, вы можете обновить схему БД или модель.

Этот подход особенно полезен, когда вам нужен полный контроль над схемой базы данных и дизайном модели и / или работа в команде, где несколько членов команды работают над одной и той же схемой и моделью БД. Может также использоваться в дополнение к EF.Migrations.

Разбуди меня на GitHub: https://github.com/kriasoft/data

0 голосов
/ 04 февраля 2010

Ну, если вы хотите работать как ActiveRecord, то вам нужно работать как ActiveRecord.:)

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

...