Поделиться через


Порт из 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 Tools and Extensions.

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