通过 Visual Studio 2013 部署时没有代码优先迁移

No Code First Migrations When Deploying Via Visual Studio 2013

我写了一个 API 当前没有 azure 连接。我现在准备将其发布到 Azure。在这样做时,我假设,就像许多其他部署的情况一样,会有代码优先迁移的选项。该网站已经存在,所以当我登录时,我 select 我的网站在下拉列表中,但我得到的屏幕如下所示,代码优先迁移复选框应该是:

如何更正此问题以便我可以使用代码优先迁移进行部署?

我找到了这个问题的解决方案。如果发生这种情况,那么您的发布配置文件将设置为更新数据库架构,但不允许代码优先迁移。我无法解释为什么 Visual Studio 有时会这样做,但要修复它,您需要更改代表该配置文件的 xml 文件。它们可以在 'Publish Profiles' 文件夹下找到。最有可能的是,您的 <PublishDatabaseSettings> 元素将有一个 <Object Type="Dbfx...etc."> 并且可能还有 <UpdateFrom> 元素。摆脱那些并用下面的设置替换设置。

<PublishDatabaseSettings>  
  <Objects xmlns="">  
    <ObjectGroup Name="Namespace.Models.YourDBClass" Order="1" Enabled="True">  
      <Destination Path="your-connection-string-goes-here" />  
      <Object Type="DbCodeFirst">  
        <Source Path="DBMigration" DbContext="Namespace.Models.YourDBClass, AssamblyName" MigrationConfiguration="Namespace.Migrations.Configuration, Assambly" Origin="Convention" />  
      </Object>  
    </ObjectGroup>  
  </Objects>  
</PublishDatabaseSettings>

现在清理并重建以取得良好效果,您应该可以开始了。请注意,如果您不删除 PublishDatabaseSettings 元素中的其他预生成元素,架构将在发布时更新,并且您可能会在第一次尝试点击 API 时出错并发生迁移。在我的例子中,在大多数情况下,这将是一个 'X already exists' 错误,因为迁移正在尝试创建已经使用模式更新创建的表。

在这篇文章的帮助下,我能够找出问题并加以纠正:http://www.dominicstpierre.com/2012/11/enable-code-first-migrations-check-box.html