Как мне получить доступ к UserManager из миграции с первым кодом? - PullRequest
1 голос
/ 06 августа 2020

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

Вместо этого я просто получаю «Конструктор без параметров не определен для типа« migrationName »». Я, конечно, могу добавить конструктор без параметров, но это решит проблему. IS есть ли способ получить экземпляр диспетчера пользователей при применении миграции?

1 Ответ

1 голос
/ 06 августа 2020

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

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

Кроме того, модель сущности (классы / свойства CLR) может сильно отличаться от той, которой они были, когда миграция была создана - ваш код всегда содержит последнюю версию, поэтому им нужно хранить информацию о модели - это какой-то альтернативный способ, не используя обычные классы. Для этого они используют метаданные EF Core и API-интерфейсы построителя со строковыми перегрузками для описания старых и новых моделей во время миграции.

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

И вообще, миграции базы данных не должны зависеть от того, кто их выполняет. За исключением случаев, когда вы пытаетесь реализовать сценарий с несколькими арендаторами и несколькими базами данных, но это потребует другого подхода и не обрабатывается должным образом (если вообще обрабатывается) в текущей системе миграции EF Core.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...