You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在执行数据库迁移时指定ProductVersion?附__EFMigrationsHistory表示例

在EF Core数据库迁移中指定ProductVersion的方法

当然可以!你完全能够在应用EF Core迁移时自定义指定ProductVersion信息,这个值最终会被写入到[dbo].[__EFMigrationsHistory]表中。下面分几种常见场景给出具体操作方式:

1. 使用.NET CLI命令行操作

不管是创建新迁移还是更新数据库,都可以通过--product-version参数直接指定版本值:

  • 创建新迁移时指定:
dotnet ef migrations add InitialCreate --product-version "1.0.0-custom-build"
  • 更新数据库时指定(如果需要给已存在的迁移记录更新版本,不过更常用的是在创建迁移时就设置好):
dotnet ef database update --product-version "1.0.0-custom-build"

2. 使用Visual Studio的Package Manager Console(PMC)

在VS的PMC窗口中,对应的参数是-ProductVersion,用法如下:

Add-Migration InitialCreate -ProductVersion "1.0.0-custom-build"
Update-Database -ProductVersion "1.0.0-custom-build"

3. 代码层面全局配置默认版本

如果想给所有迁移统一设置一个默认的ProductVersion,可以在配置DbContext的时候指定:

// 在Program.cs的服务配置中
services.AddDbContext<YourDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), 
        b => b.MigrationsHistoryTable("__EFMigrationsHistory", "dbo")
              .MigrationsProductVersion("2.0.0-global-default")));

或者在DbContext的OnConfiguring方法中配置:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer("YourConnectionString",
        b => b.MigrationsProductVersion("2.0.0-global-default"));
}

一些额外说明

  • ProductVersion字段本质是元数据字段,主要用来记录创建迁移时使用的EF Core版本,自定义值不会影响EF Core的迁移执行逻辑,只是作为信息存储在历史表中。
  • 如果在创建迁移时指定了版本,后续执行Update-Database时如果不额外指定,会自动使用迁移文件中记录的版本值;如果更新时特意指定了新值,会覆盖写入__EFMigrationsHistory表对应的记录。

内容的提问来源于stack exchange,提问作者Cristian Szpisjak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:50:01