有关如何在多个Azure SQL数据库,连接字符串和Azure App Services发布配置文件中使用迁移的完整指南

时间:2018-11-22 13:48:24

标签: asp.net-mvc entity-framework-6 azure-sql-database ef-migrations azure-web-app-service

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

我(认为)理解我可以使用DbContext类的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 ...
}    

但是,即使我在控制台中成功执行了Update-Database命令,我仍然会收到类似“已经有一个名为XXX ...的表”之类的错误,但仍然会失败。

我对此很失落,似乎找不到找到解决方案的最佳方法。我希望能够使用多个发布配置文件(稍后我们将使用开发插槽,但现在不使用),并且还可以进行配置。我可以看到来自web.config的所有连接以及“更新数据库”复选框,但似乎找不到正确的方式来配置所有内容……

有人可以帮助我,建议我或提供任何帮助吗? 亲切的问候!

1 个答案:

答案 0 :(得分:1)

ASP.NET 5引入了改进的支持,可在多个环境中控制应用程序行为,例如SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); String name = preferences.getString("Name", null); yourEditText.setText(name); developmentstaging。环境变量用于指示应用程序在哪个环境中运行,从而可以对应用程序进行适当的配置。

您可以将production设置为要使用的当前环境。如果需要检查应用程序是否在特定环境中运行,请使用ASPNET_ENV

env.IsEnvironment("environmentname")

有关更多详细信息,您可以参考此article和此one,尽管它们是asp.net核心。