Порт из EF6 в EF Core — база данных в качестве источника истины

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

  1. Выберите точку во времени, чтобы моделировать базу данных.
  2. Убедитесь, что проекты EF6 обновлены и синхронизированы с базой данных.
  3. Создайте проект EF Core.
  4. Используйте средства формирования шаблонов для реконструирования базы данных в коде.
  5. Убедитесь, что созданные классы EF Core совместимы с кодом.
  6. Для исключений измените созданные классы и обновите конфигурацию модели или адаптируйте код к модели.

Обратите внимание, что, хотя EF Core в настоящее время создает все необходимые для успешного создания копии базы данных, большая часть кода не требуется для первого подхода к базе данных. Исправление этой проблемы отслеживается в выпуске No 10890. Что можно спокойно игнорировать, так как это не требуется: последовательности, имена ограничений, неуникованные индексы и фильтры индексов.

Обработка изменений схемы

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

Советы по обработке различий в модели

По разным причинам может потребоваться, чтобы модель предметной области C# была сформирована иначе, чем модель, созданная в реверсии. Во многих случаях это означает ручное обновление кода, который создается автоматически после каждого изменения схемы. Одним из способов предотвращения дополнительных усилий при повторном создании кода является использование разделяемых классов для dbContext и связанных сущностей. Затем можно сохранить код, связанный с бизнес-логикой и свойствами, которые не отслеживаются в базе данных в отдельном наборе файлов классов, которые не будут перезаписаны.

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

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

Настройка создания кода

В настоящее время EF Core 6 не поддерживает настройку созданного кода. Существуют сторонние решения, такие как EF Core Power Tools . Список рекомендуемых средств и расширений сообщества см. в статье " Средства и расширения EF Core".

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