如何通过SetParameters与实体框架

时间:2018-05-16 16:25:28

标签: c# asp.net entity-framework-6

我的项目有多个环境,每个环境都使用自己的数据库。我最近将数据库切换到EF以便更新它。唯一的问题是,我似乎无法获得EF转换的连接字符串。

目前,我的流程如下:

  • 我有一个SetParameters.xml文件,其中包含该网站的默认连接字符串。
  • 我为每个环境都有一个SetParameters.ENV.xml文件,其中包含已修改的连接字符串。
  • 我使用Bamboo使用msbuild创建构建。
  • 我使用Bamboo来使用msdeploy进行部署和转换。

常规连接字符串上的转换工作正常。

根据this documentationWeb.config文件将添加一个额外的连接字符串。就我而言,它是Main_DatabasePublish

我似乎无法改变。如果我将一个默认连接添加到发布配置文件,它将被设置为该字符串,但不幸的是它仍然没有转换为使用正确的数据库。

我想补充说我没有使用EF Core。看来命令行会更容易。

有什么想法吗?

更新

感谢@SteveGreene,我能够让这个工作。原来我需要的是在我的Application_Start方法中添加几行来调用更新。我不确定这是否是最佳方式,但确实有效。

using System.Data.Entity;
using System.Data.Entity.Migrations;

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, MyConfiguration>());
var dbMigrator = new DbMigrator(new MyConfiguration());
dbMigrator.Update();

1 个答案:

答案 0 :(得分:1)

我最终做的是将以下内容添加到Global.asax::Application_Start

using System.Data.Entity;
using System.Data.Entity.Migrations;

System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, Configuration>());
var dbMigrator = new DbMigrator(new Configuration());
var migrations = dbMigrator.GetPendingMigrations();
if (migrations.Any())
{
    dbMigrator.Update();
}