Как связаны OnModelCreating и неавтоматические миграции?

Когда я добавляю новую таблицу, которая имеет некоторые связи с моей базой данных, а затем запускаю Add-Migration, я вижу, что в методе Up создается код для добавления таблицы и ее связей. Однако я предпочитаю определять отношение, используя свободный API в методе OnModelCreating. Как эти два метода взаимодействуют? Могу ли я удалить код из метода Up, который, например, определяет отношение?


person Dabblernl    schedule 24.06.2012    source источник


Ответы (1)


Каждый из них имеет совершенно разное назначение:

  • OnModelCreating используется для встроенных определений fluent-API вашей модели. Эти определения вместе с соглашениями по умолчанию, аннотациями данных и классами конфигурации образуют полное определение модели.
  • Явная миграция определяет, что необходимо сделать с базой данных, чтобы перенести ее в форму, требуемую вашей текущей моделью.

Теперь, как эти двое соотносятся? Миграция имеет два входа, которые используются для генерации кода миграции (методы Up и Down). Один вход — это последняя запись миграции, хранящаяся в таблице __MigrationHistory базы данных. Эта запись содержит сериализованную модель, представляющую базу данных. Этот ввод является необязательным, так как первая миграция должна работать без него. Второй ввод является обязательным — это ваша текущая модель, которая извлекается путем выполнения кода в вашей текущей сборке => Add-Migration выполнит ваш OnModelCreating, чтобы получить текущую модель и сравнить ее с моделью, полученной из базы данных. Результатом сравнения является содержимое методов Up и Down в явной миграции.

person Ladislav Mrnka    schedule 24.06.2012
comment
Спасибо! Итак, если я правильно понимаю, код в методе Up будет отражать определения, установленные в методе OnModelCreating (предположим, что вы добавили миграцию после написания определения Fluent API). Нельзя не удалять эти отраженные определения из Up. - person Dabblernl; 25.06.2012
comment
Как лучше всего внедрить код в код миграции, используя OnModelCreating ModelBuilder? Это будет HasAnnotation? - person Shimmy Weitzhandler; 27.12.2018