如何在执行数据库迁移时指定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
相关产品推荐
相关产品推荐

