为什么 Entity Framework 包在我 运行 迁移时自动更新?

Why are Entity Framework packages automatically updating when I run a migration?

我在 .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

为了构建 Standard 项目,我需要使用 Entity Framework 版本 3.1.21 创建迁移,因为更新的版本不适用于 .NET Standard 2.0。但是,当我 运行 上面的命令时,.NET 5.0 API 中的包会自动更新到 5.0.12,这意味着生成的迁移代码与包含它的标准项目不兼容。

为什么会这样?我该如何阻止它发生?

我最好的猜测是,这是因为我使用的是与 3.1.21 不兼容的东西。我知道我目前正在为 ID 和 iirc 使用字符串,这在 3.1.21 中是不可能开箱即用的。

这是自动更改前的项目文件:

 <ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.21">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Identity.Web" Version="1.20.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />

在我做了两件事后,现在一切正常。 (一个或另一个可能无关。)

  1. 为了兼容EF 3.1.21
  2. 我把字符串Id改成int了
  3. 我清理了解决方案。