Я играл с Entity Framework 4, используя подход, основанный на модели, для создания сценария базы данных из моих сущностей. Это здорово, но я не уверен, как это работает, когда дело доходит до управления версиями базы данных. Я предполагаю, что если бы я хотел использовать активную структуру миграции типа записи, мне пришлось бы работать наоборот и создавать свои объекты из моей базы данных? Есть ли способ использовать подход, основанный на модели, и правильную версию базы данных?
Миграция базы данных для Entity Framework 4
Ответы (5)
Это скоро появится в пакете 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.
Вы можете попробовать Wizardby: это инструмент для управления миграцией базы данных. Он не интегрируется с EF (поскольку практически невозможно интегрироваться с ним в этом отношении), но выполняет свою работу.
ScottGu что-то упоминает об этом в запись в блоге:
Мы также собираемся поддерживать функцию «миграции» с EF в будущем, которая позволит вам программно автоматизировать/создавать сценарии миграции схемы базы данных.
[РЕДАКТИРОВАТЬ]
Я думаю, он может иметь в виду Entity Designer Database Generation Power Pack, как ответил Мортеза Манави в еще один ответ SO.
Ну, если вы хотите работать как ActiveRecord, то вам нужно работать как ActiveRecord. :)
Однако, если вы хотите использовать модель в первую очередь, но по-прежнему использовать миграции, это будет возможно, но потребует дополнительной работы от вашего имени. Model-first сгенерирует сценарий изменения базы данных. Вам придется извлечь соответствующие части в миграции, а также вручную написать сценарии отмены. Хотя это требует некоторого ручного труда, это не кажется мне ужасно сложным.
Я работаю над альтернативой библиотеке 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