Asp.net mvc 有关如何将迁移与多个Azure SQL数据库、连接字符串和Azure应用程序服务发布配置文件一起使用的完整指南

Asp.net mvc 有关如何将迁移与多个Azure SQL数据库、连接字符串和Azure应用程序服务发布配置文件一起使用的完整指南,asp.net-mvc,entity-framework-6,azure-sql-database,entity-framework-migrations,azure-web-app-service,Asp.net Mvc,Entity Framework 6,Azure Sql Database,Entity Framework Migrations,Azure Web App Service,我有一个MVC项目托管在Azure应用程序服务中,其中包含数据的Azure SQL数据库。我有一个开发、暂存/验收和生产环境(应用程序服务),至于数据库,我有开发、暂存/验收、生产和本地数据库(mdf)。我有3个发布配置文件(每个环境1个) 我(认为)要理解,我可以使用DbContext类的CTOR根据名称从web.config设置connectionstring: 前 如果我不使用迁移,我可以做我想做的事情,而不会出现任何问题。在使用迁移时(因为我不想在更改模型时丢失任何数据),我在创建模型时

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

我(认为)要理解,我可以使用DbContext类的CTOR根据名称从web.config设置connectionstring:

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

// 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>());
//这是一个自定义种子程序,它继承DropDatabaseAlways/WhenModelChanges
System.Data.Entity.Database.SetInitializer(新ContractCareSeeder());
//据我所知,这说明要使用应用的最新迁移
System.Data.Entity.Database.SetInitializer(新的MigrateDatabaseToLatestVersion());
配置。cs:

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

    // seeding method ...
}    
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
}
//播种方法。。。
}    
但我总是收到错误,如“已经有一个名为XXX的表…”,即使我在控制台中成功地执行了updatedatabase命令,它仍然失败

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

有人能帮助我、建议我或提供任何形式的帮助吗?
亲切的问候

ASP.NET 5引入了对跨多个环境控制应用程序行为的改进支持,如
开发
登台
、以及
生产
。环境变量用于指示应用程序正在哪个环境中运行,从而允许适当地配置应用程序

您可以使用要使用的当前环境设置
ASPNET\u ENV
。如果需要检查应用程序是否在特定环境中运行,请使用
env.IsEnvironment(“environmentname”)


有关更多详细信息,您可以参考这个和这个,尽管它是asp.net core。

Joey Cai,确定环境或数据库不是问题所在,而且我没有使用core,因此据我所知,我无法设置环境变量。我遇到的问题是,我对如何正确使用迁移以及多个环境(应用程序服务发布配置文件)和Azure数据库的种子程序感到困惑。我不想在更改模型时丢失数据。我可以在不进行迁移的情况下正确地使用它,并发布到正确的数据库或应用程序服务,但在添加迁移时,我会遇到现有表的问题。(如果我需要澄清一些事情,请让我知道)在没有迁移的情况下,您如何切换环境?您可以参考本文。Joey Cai,我通过在我的ApplicationDbContext CTOR(决定我的数据库)中设置contextName来切换环境,发布时,我为每个环境都有一个发布配置文件。在我看来,这是一个问题,在我的发布配置文件=>Configure=>Settings中,如果没有收到错误,我无法让它正常工作,我尝试了不同的方法,选中/取消选中“更新数据库”选项或“执行代码优先迁移”。启用迁移后,我可以发布,但无法写入在此配置中配置的数据库。感谢您提供的链接Joey Cai我今天将查看此链接,它看起来是使用不同环境的好方法,但我认为这不会解决我的迁移问题。将发布更新。(谢谢)现在有什么过程吗?@Joycai,还没有,我必须继续开发某些功能,一旦完成,我将再次尝试迁移场景,看看我的发现是什么,我会发回这里。谢谢你的跟进。
internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

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