我在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的所有连接以及“更新数据库”复选框,但似乎找不到正确的方式来配置所有内容……
有人可以帮助我,建议我或提供任何帮助吗? 亲切的问候!
答案 0 :(得分:1)
ASP.NET 5引入了改进的支持,可在多个环境中控制应用程序行为,例如SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name", null);
yourEditText.setText(name);
,development
和staging
。环境变量用于指示应用程序在哪个环境中运行,从而可以对应用程序进行适当的配置。
您可以将production
设置为要使用的当前环境。如果需要检查应用程序是否在特定环境中运行,请使用ASPNET_ENV
env.IsEnvironment("environmentname")