Как получить доступ к контексту после каждой миграции БД Entity Framework

когда я добавляю-миграцию, я получаю соответствующий класс DbMigration с методами Up / Down, где я могу вносить изменения в схему и (с использованием метода Sql ()) также могу вносить изменения в данные/содержимое.

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

Я бы предпочел иметь методы UpCompleted()/DownCompleted (), которые обеспечивали бы доступ к контексту БД после завершения миграции. Это позволит писать инкрементные данные / изменения контекста "скрипты" таким образом, что они будут менее подвержены ошибкам, чем использование метода Sql ().

Я что-то пропустила? Возможно ли это?

спасибо!

1 ответов


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

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

Если вы хотите написать такую логику seed/data-manipulation, вам нужно поместить ее в конец методов Up / Down и использовать метод Sql для ее выполнения с помощью raw SQL.

~рябина