Почему пакеты Entity Framework автоматически обновляются при запуске миграции?

#visual-studio #entity-framework #.net-core #.net-standard

#visual-studio #структура организации #.net-ядро #.net-стандарт

Вопрос:

У меня есть контекст базы данных, определенный в проекте .NET Standard 2.0, так что он может использоваться как клиентами .NET 5.0, так и клиентами .NET 4.7.x. Я пытаюсь создать начальную миграцию и сгенерировать из нее сценарии. Я использую следующую команду для создания миграции:

 dotnet ef migrations add InitialCreate --project My.Standard.DataContext.Project --startup-project My.DotNet5.Api  

Для создания стандартного проекта мне необходимо создать миграцию с использованием Entity Framework версии 3.1.21, поскольку более поздние версии не работают со стандартом .NET 2.0. Однако при выполнении вышеуказанной команды пакеты в API .NET 5.0 автоматически обновляются до 5.0.12, что означает, что созданный код миграции несовместим со стандартным проектом, который его включает.

Почему это происходит? Как мне остановить это?

Мое лучшее предположение заключается в том, что это потому, что я использую что-то, что несовместимо с 3.1.21. Я знаю, что в настоящее время я использую строки для идентификаторов и iirc, что невозможно из коробки в 3.1.21.

Вот файл проекта, прежде чем он автоматически изменится:

 lt;ItemGroupgt; lt;PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.21" /gt; lt;PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.21" /gt; lt;PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.21"gt;  lt;PrivateAssetsgt;alllt;/PrivateAssetsgt;  lt;IncludeAssetsgt;runtime; build; native; contentfiles; analyzers; buildtransitivelt;/IncludeAssetsgt; lt;/PackageReferencegt; lt;PackageReference Include="Microsoft.Identity.Web" Version="1.20.0" /gt; lt;PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /gt;  

Комментарии:

1. Пожалуйста, покажите свой файл проекта (часть пакетов nuget).

Ответ №1:

Это работает так, как ожидалось, после того, как я сделал две вещи. (Одно или другое может быть не связано.)

  1. Я изменил идентификатор строки на int, чтобы быть совместимым с EF 3.1.21
  2. Я очистил раствор.