Когда я добавляю новую таблицу, которая имеет некоторые связи с моей базой данных, а затем запускаю Add-Migration
, я вижу, что в методе Up
создается код для добавления таблицы и ее связей. Однако я предпочитаю определять отношение, используя свободный API в методе OnModelCreating
. Как эти два метода взаимодействуют? Могу ли я удалить код из метода Up
, который, например, определяет отношение?
Как связаны OnModelCreating и неавтоматические миграции?
Ответы (1)
Каждый из них имеет совершенно разное назначение:
OnModelCreating
используется для встроенных определений fluent-API вашей модели. Эти определения вместе с соглашениями по умолчанию, аннотациями данных и классами конфигурации образуют полное определение модели.- Явная миграция определяет, что необходимо сделать с базой данных, чтобы перенести ее в форму, требуемую вашей текущей моделью.
Теперь, как эти двое соотносятся? Миграция имеет два входа, которые используются для генерации кода миграции (методы Up
и Down
). Один вход — это последняя запись миграции, хранящаяся в таблице __MigrationHistory
базы данных. Эта запись содержит сериализованную модель, представляющую базу данных. Этот ввод является необязательным, так как первая миграция должна работать без него. Второй ввод является обязательным — это ваша текущая модель, которая извлекается путем выполнения кода в вашей текущей сборке => Add-Migration
выполнит ваш OnModelCreating
, чтобы получить текущую модель и сравнить ее с моделью, полученной из базы данных. Результатом сравнения является содержимое методов Up
и Down
в явной миграции.
Up
будет отражать определения, установленные в методе OnModelCreating
(предположим, что вы добавили миграцию после написания определения Fluent API). Нельзя не удалять эти отраженные определения из Up
.
- person Dabblernl; 25.06.2012
OnModelCreating
ModelBuilder
? Это будет HasAnnotation
?
- person Shimmy Weitzhandler; 27.12.2018