You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

.NET Aspire如何通过命令行执行PostgreSQL数据库迁移?

解决方案

1. 直接使用EF Core命令行工具(无需启动Aspire)

这是最直接的方式,针对你的.NET 8 DbContext项目执行迁移:

  • 确保已安装EF Core全局工具:
    dotnet tool install --global dotnet-ef
    
  • 切换到你的DbContext项目目录,执行迁移更新命令(替换连接字符串为你的PostgreSQL配置):
    dotnet ef database update --project .\YourDbContextProject.csproj --connection "Host=localhost;Database=YourTargetDb;Username=postgres;Password=YourPassword"
    
    命令执行完成后会自动退出,无需手动关闭任何应用。

2. 在Aspire中添加一次性迁移任务

如果希望通过Aspire生态触发迁移,同时避免主应用持续运行,可以创建一个专用的迁移任务:

  • 在Aspire解决方案中添加一个**.NET 8控制台项目**(与DbContext版本保持一致)
  • 引用你的DbContext项目,并安装Npgsql.EntityFrameworkCore.PostgreSQL
  • 在控制台项目中编写迁移逻辑:
    using Microsoft.EntityFrameworkCore;
    using YourDbContextNamespace;
    
    // 配置PostgreSQL连接字符串
    var connectionString = "Host=localhost;Database=YourTargetDb;Username=postgres;Password=YourPassword";
    var options = new DbContextOptionsBuilder<YourDbContext>()
        .UseNpgsql(connectionString)
        .Options;
    
    using var context = new YourDbContext(options);
    // 执行迁移(自动创建数据库+应用所有未执行的迁移)
    await context.Database.MigrateAsync();
    
    Console.WriteLine("数据库迁移完成,程序即将退出");
    
  • 在Aspire AppHost项目中注册这个任务,并设置依赖于PostgreSQL服务:
    var postgres = builder.AddPostgres("postgres-service")
        .WithDatabase("YourTargetDb");
    
    // 添加迁移任务,设置为一次性运行
    var migrateJob = builder.AddProject<Projects.YourMigrationJob>("db-migrate-job")
        .DependsOn(postgres);
    
  • 运行迁移任务:
    dotnet run --project .\YourAspireAppHost.csproj --launch-profile db-migrate-job
    
    任务执行完成后会自动退出,不会启动主应用。

3. 使用Visual Studio包管理器控制台

如果使用Visual Studio,直接在包管理器控制台操作:

  • 确保控制台的「默认项目」选择你的.NET 8 DbContext项目
  • 执行更新命令(替换连接字符串):
    Update-Database -Connection "Host=localhost;Database=YourTargetDb;Username=postgres;Password=YourPassword"
    
    命令执行完毕后自动结束,无需启动Aspire应用。

内容的提问来源于stack exchange,提问作者Bence Hérincs

火山引擎 最新活动