Порт из EF6 в EF Core — база данных в качестве источника истины
Если вы используете базу данных в качестве источника истины, обновление в основном будет включать в себя устранение любых изменений в форме созданных сущностей. Ниже приведены шаги для миграции.
- Выберите точку во времени, чтобы моделировать базу данных.
- Убедитесь, что проекты EF6 обновлены и синхронизированы с базой данных.
- Создайте проект EF Core.
- Используйте средства формирования шаблонов для реконструирования базы данных в коде.
- Убедитесь, что созданные классы EF Core совместимы с кодом.
- Для исключений измените созданные классы и обновите конфигурацию модели или адаптируйте код к модели.
Обратите внимание, что, хотя EF Core в настоящее время создает все необходимые для успешного создания копии базы данных, большая часть кода не требуется для первого подхода к базе данных. Исправление этой проблемы отслеживается в выпуске No 10890. Что можно спокойно игнорировать, так как это не требуется: последовательности, имена ограничений, неуникованные индексы и фильтры индексов.
Обработка изменений схемы
Если база данных является источником истины, EF Core извлекает сведения о схеме из базы данных, а не отправляет ее с помощью миграций. Типичный рабочий процесс — повторное выполнение шага обратного проектирования при каждом изменении схемы базы данных. Комплексный набор тестов ценен для этого подхода, так как вы можете автоматизировать процесс формирования шаблонов и проверить изменения, запустив тесты.
Советы по обработке различий в модели
По разным причинам может потребоваться, чтобы модель предметной области C# была сформирована иначе, чем модель, созданная в реверсии. Во многих случаях это означает ручное обновление кода, который создается автоматически после каждого изменения схемы. Одним из способов предотвращения дополнительных усилий при повторном создании кода является использование разделяемых классов для dbContext и связанных сущностей. Затем можно сохранить код, связанный с бизнес-логикой и свойствами, которые не отслеживаются в базе данных в отдельном наборе файлов классов, которые не будут перезаписаны.
Если модель значительно отличается от созданной, но часто не меняется, рекомендуется использовать шаблон репозитория в качестве адаптера. Репозиторий может использовать созданные классы EF Core и публиковать используемые пользовательские классы. Это может снизить влияние изменений, изолируя их в коде репозитория, а не выполнять рефакторинг на уровне приложения при каждом изменении схемы.
Вы можете рассмотреть альтернативный рабочий процесс и выполнить действия, аналогичные гибридному подходу. Вместо создания нового набора классов каждый раз вы указываете конкретные таблицы только для создания новых классов. Существующие классы "как есть" сохраняются и непосредственно добавляются или удаляются измененные свойства. Затем вы обновите конфигурацию модели, чтобы устранить любые изменения в сопоставлении базы данных с существующими классами.
Настройка создания кода
В настоящее время EF Core 6 не поддерживает настройку созданного кода. Существуют сторонние решения, такие как EF Core Power Tools . Список рекомендуемых средств и расширений сообщества см. в статье " Средства и расширения EF Core".
Наконец, просмотрите подробный список различий между EF6 и EF Core , чтобы устранить оставшиеся проблемы с переносом.