Asp.net core 实体框架中两种不同连接字符串的迁移

Asp.net core 实体框架中两种不同连接字符串的迁移,asp.net-core,entity-framework-core,asp.net-core-webapi,entity-framework-core-migrations,Asp.net Core,Entity Framework Core,Asp.net Core Webapi,Entity Framework Core Migrations,我有一个数据库和两个数据库,一个用于调试/开发(本地),一个用于生产(在线)。我使用appsetting.Development.json和appsettings.Production.json文件切换它们 两者都是这样的: { "ConnectionStrings": { "Default": "Server={myServer};Persist Security Info=False;User ID={MyUser};Passwo

我有一个数据库和两个数据库,一个用于调试/开发(本地),一个用于生产(在线)。我使用
appsetting.Development.json
appsettings.Production.json
文件切换它们

两者都是这样的:

{
  "ConnectionStrings": {
    "Default": "Server={myServer};Persist Security Info=False;User ID={MyUser};Password={myPassword};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  }
因此,当我处理代码并启动它时,它使用localDb,当我发布它时,它使用另一个db

现在,当我更改模型中的某些内容时,我总是要删除迁移文件,然后执行以下操作

dotnet ef migrations add InitialModel
然后

dotnet ef database update
之后,再次删除迁移文件,将
appsettings.Development.json
条目更改为my online db并再次执行命令

下面是我的问题:

  • 有没有办法选择在迁移命令中应该使用什么配置? 比如:

  • 有没有办法将迁移文件与两个数据库一起使用,这样我就不必总是删除迁移文件


  • 在Startup.cs文件中添加连接字符串时,我不确定是否有迁移命令让您选择config。不过,我可以分享我是如何做到这一点的,你可以看看它是否适合你。通常,appsettings.json文件中有两个连接字符串。像这样的
    “ConnectionString”:{“DevConnection”:“Data source=databasename.db”,“ProdConnection”:“Data source=databasename.db”},
    Startup.cs
    文件中,我在依赖项注入容器中指定连接字符串。在我的
    Program.cs
    文件中,我有这个

            var host = CreateHostBuilder(args).Build();
            using(var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService<DataContext>();
                    var userManager = services.GetRequiredService<UserManager<AppUser>>(); //if you have users in your seed data
                    context.Database.Migrate();
                    Seed.SeedData(context, userManager).Wait(); //If you have seed data with test users
    
                }
                catch(Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred during migration");
                }
            }
            host.Run();
    
    var host=CreateHostBuilder(args.Build();
    使用(var scope=host.Services.CreateScope())
    {
    var services=scope.ServiceProvider;
    尝试
    {
    var context=services.GetRequiredService();
    var userManager=services.GetRequiredService();//如果种子数据中有用户
    Migrate();
    Seed.SeedData(上下文,userManager).Wait();//如果您有测试用户的Seed数据
    }
    捕获(例外情况除外)
    {
    var logger=services.GetRequiredService();
    logger.LogError(例如,“迁移期间发生错误”);
    }
    }
    host.Run();
    
    这段代码确保您不需要运行updatedatabase命令。您只需创建迁移并启动应用程序。 您只需要在开发之后切换依赖项注入容器中的连接字符串。切换连接字符串时,不需要运行Update Database命令。您还可以使用环境变量。你可以看看它是如何工作的

            var host = CreateHostBuilder(args).Build();
            using(var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService<DataContext>();
                    var userManager = services.GetRequiredService<UserManager<AppUser>>(); //if you have users in your seed data
                    context.Database.Migrate();
                    Seed.SeedData(context, userManager).Wait(); //If you have seed data with test users
    
                }
                catch(Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred during migration");
                }
            }
            host.Run();