有关如何将迁移与多个 Azure SQL 数据库、连接字符串和 Azure 应用服务发布配置文件结合使用的完整指南

Complete guide on how to use Migrations with several Azure SQL databases, connectionstrings and Azure App Services publish profiles

我有一个 MVC 项目托管在 Azure 应用服务中,使用 Azure SQL 数据库存储数据。我有一个开发、staging/acceptance 和生产环境(应用程序服务),至于我有开发、staging/acceptance、生产和本地数据库 (mdf) 的数据库。我有 3 个发布配置文件(每个环境 1 个)。

我(认为)了解我可以使用 DbContext class 的 CTOR 根据名称从 web.config 设置连接字符串:

例如

public ApplicationDbContext(): base("DbContextNameThatResidesInWebConfig") 
{           
     // ...               
}   

如果我不使用迁移,我可以毫无问题地做我想做的事。使用迁移时(因为我不想在更改模型时丢失任何数据)我在创建模型时遇到了几个问题,我尝试在上面的 CTOR 中使用几种方法:

// this is a custom Seeder that inherits DropDatabaseAlways/WhenModelChanges
System.Data.Entity.Database.SetInitializer(new ContractCareSeeder()); 

// from what i understand, this tells to use the latest migrations applied
System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Migrations.Configuration>());

Configuration.cs:

internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    // seeding method ...
}    

但我总是收到类似 "there is already a table called XXX ..." 的错误,即使我在控制台中成功执行了 Update-Database 命令,它仍然失败。

我对此很迷茫,似乎找不到处理我的情况的最佳方法。我希望能够使用多个发布配置文件(稍后我们将使用开发插槽但不是现在)并且还有可能的配置。我可以从我的 web.config 中看到我的所有连接以及更新数据库复选框,但我似乎无法找到一起配置所有内容的正确方法...

任何人都可以帮助我、建议我或提供任何形式的帮助吗? 亲切的问候!

ASP.NET 5 引入了对控制应用程序行为的改进支持 跨多个环境,例如 developmentstaging 和 [=13] =].环境变量用于指示应用程序 运行 所处的环境,以便适当地配置应用程序。

您可以将ASPNET_ENV设置为您要使用的当前环境。如果您需要检查应用程序在特定环境下是否 运行,请使用 env.IsEnvironment("environmentname")

if (env.IsDevelopment())
{
    app.UseBrowserLink();
    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
}
else
{
    app.UseExceptionHandler("/Home/Error");
}

有关更多详细信息,您可以参考此 article and this 虽然它是 asp.net 核心。