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

Posted

技术标签:

【中文标题】为啥在我运行迁移时 Entity Framework 包会自动更新?【英文标题】:Why are Entity Framework packages automatically updating when I run a migration?为什么在我运行迁移时 Entity Framework 包会自动更新? 【发布时间】:2022-01-15 05:34:45 【问题描述】:

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

【问题讨论】:

请显示您的项目文件(nuget 包部分)。 【参考方案1】:

在我做了两件事之后,这现在按预期工作。 (其中一个可能不相关。)

    我将字符串 Id 更改为 int,以便与 EF 3.1.21 兼容 我清洗了溶液。

【讨论】:

以上是关于为啥在我运行迁移时 Entity Framework 包会自动更新?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Entity Framework Core 在运行时迁移

如何在 Entity Framework 4.3.1 中禁用迁移?

如何在 Entity Framework 4.3.1 中禁用迁移?

为啥它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误?

不知道为啥 django South 试图运行反向迁移

无法使用 Entity Framework 和 Visual Studio 2015 添加迁移