Что случилось с CSharpMigrationsGenerator и SqlServerMigrationsSqlGenerator

#entity-framework-core #ef-core-6.0

#сущность-структура-ядро #ef-core-6.0

Вопрос:

После обновления существующего проекта с EF Core 5 до EF Core 6 некоторые настройки больше не будут компилироваться, в частности настройки для классов CSharpMigrationsGenerator и SqlServerMigrationsSqlGenerator. Хотя пространства имен указаны правильно, Visual Studio подчеркивает ссылки на них и, похоже, не понимает, о чем я говорю. Глядя на исходный код EF Core, классы находятся там, где они должны быть, так почему я не могу увидеть их в своем проекте?

Ответ №1:

Это побочный эффект обновления NuGet ссылки на пакет. В Microsoft.EntityFrameworkCore.Миграции.Пространство имен Design происходит от Microsoft.Пакет EntityFrameworkCore.Design, который хочет установить себя как анализатор.

После обновления ссылки ваш файл csproj будет выглядеть следующим образом:

 lt;PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0"gt;  lt;PrivateAssetsgt;alllt;/PrivateAssetsgt;  lt;IncludeAssetsgt;runtime; build; native; contentfiles; analyzers; buildtransitivelt;/IncludeAssetsgt; lt;/PackageReferencegt;  

Это неверно. Вот как вы ссылаетесь на анализатор. Это делает код в этом пакете доступным для Visual Studio, но не для вашего кода. То, что вам нужно, — это обычная старая ссылка на пакет, подобная этой:

 lt;PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0" /gt;  

Исправление вашего файла csproj снова сделает классы доступными для вашего кода.