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


Перенос модели на основе EDMX EF6 в EF Core

EF Core не поддерживает формат файлов EDMX для моделей. Оптимальным вариантом для переноса этих моделей является создание новой модели на основе кода из базы данных для приложения.

Установка пакетов NuGet EF Core

Установите пакет NuGet Microsoft.EntityFrameworkCore.Tools.

Повторное создание модели

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

Выполните ниже команду в консоли диспетчера пакетов ("Средства" -> "Диспетчер пакетов NuGet" -> "Консоль диспетчера пакетов"). В разделе Консоль диспетчера пакетов (Visual Studio) приведены параметры команды для формирования шаблонов для подмножества таблиц и т. п.

Scaffold-DbContext "<connection string>" <database provider name>

Например, ниже приведена команда для формирования шаблона модели из базы данных Blogging в экземпляре LocalDB SQL Server.

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer

Удаление модели EF6

Теперь можно удалить модель EF6 из приложения.

Можно оставить установленный пакет NuGet EF6 (EntityFramework), так как EF Core и EF6 могут использоваться параллельно в одном приложении. Однако если вы не планируете использовать EF6 в каких-либо областях приложения, то удаление пакета поможет вывести ошибки компиляции для фрагментов кода, требующих внимания.

Обновление кода

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

Тестирование переноса

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

Дополнительные рекомендации

EF Core не поддерживает поставщик EntityClient, поэтому любые запросы EntitySQL нужно перенести в LINQ или FromRawSql.

Более того, строки подключения EntityClient не поддерживаются.

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