Как игнорировать таблицу / класс в миграциях EF 4.3 - PullRequest
7 голосов
/ 26 января 2012

Я тестирую с EF 4.3 (бета)

У меня есть несколько новых классов, которые должны генерировать таблицы и столбцы БД.

Из старого проекта в моей схеме есть несколько старых таблиц, к которым я хочу получить доступ через EF. Все классы объявлены. Для доступа к старой таблице есть отображаемое poco.

Миграция базы данных также пытается создать эту старую таблицу.

Как установить, что этот класс / таблица является не частью миграции, а частью модели ef?

xxx.OnModelCreating()    
{
    modelBuilder.Ignore<myOldTableClass>();    
}

удаляет весь класс из модели. наконец, я не могу использовать его для доступа через dbContext.

Мне нравится использовать автоматические миграции. я стараюсь не переносить старые таблицы БД полностью в классы EF. (Да, я знаю, что для этого есть генераторы) Есть 120 таблиц, которые до сих пор используются старыми приложениями.

некоторые новые таблицы, которые используются только с EF (новое приложение). Есть 3 часто используемых таблицы. они не должны быть созданы, но доступны через ef.

Ответы [ 2 ]

24 голосов
/ 08 марта 2012

С выпущенной EF 4.3.1 встроена поддержка этого сценария. При добавлении классов, сопоставленных с существующими таблицами в базе данных, используйте переключатель -IgnoreChanges на Add-Migration.

Это создаст пустую миграцию с обновленной подписью метаданных, которая содержит вновь добавленные классы.

Обычно это делается при начале использования EF Migrations, отсюда и название «InitialMigration»:

Add-Migration InitialMigration –IgnoreChanges
3 голосов
/ 26 января 2012

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

Если вы до сих пор не использовали миграции, среда создаст миграции для всех таблиц, которые есть в проекте, поскольку она полагает, что вы создаете начальную миграцию. После создания миграции вы можете изменить ее исходный файл и удалить код CreateTable для старых классов из метода Up. Проблема в том, что вам, вероятно, придется делать это при любой последующей миграции.

Редактировать: Я написал пошаговое руководство для добавления миграций в существующий проект с EF 4.3.1

...