使用Code First Migrations发布我的数据库(包部署)

Bro*_*ato 6 asp.net asp.net-mvc visual-studio ef-migrations visual-studio-2012

我有一个VS2012 MVC4解决方案(EF5).编码时,我使用安装在同一台机器上的SQL Express的个人计算机.每次我需要向公司发布更新时,我都会创建一个包(.zip),然后在公司的IIS上导入此包(不能从我的开发计算机访问).每次我在公司的IIS服务器上发布我的解决方案时,我都会重新创建整个数据库.那是过去的......

现在,我改变了我的解决方案并使用Code First Migrations.当需要(实体已更改)时,由于"程序包管理器控制台"(Update-Database),我更新了本地数据库.

我的问题:如何在公司的IIS上更新数据库?

我在解释页面(http://msdn.microsoft.com/en-us/library/dd465337.aspx)上看到了下面的截图,但是当我在VS2012上打开发布向导时,我没有相同的屏幕.

以下是文档页面上显示的屏幕:

在此输入图像描述

以下是我的屏幕:

在此输入图像描述

任何帮助是极大的赞赏.

Dom*_*rre 7

您可以通过编辑Properties\YourProject - WebDeploy.pubxml查找PublishDatabaseSettings来启用该复选框

<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>
Run Code Online (Sandbox Code Playgroud)

通过继承DbContext的类更改Namespace.Models.YourDBClass,更改Namespace.Migratins.Configuration以适合您的迁移配置命名空间和Assambly与您的Assambly名称.

保存并打开您将拥有该复选框的发布向导.

希望有所帮助


Ode*_*ode 5

我也看到过这种情况.我不确定部署工具用于识别EF存在的启发式方法,但该选项偶尔出现.

发布工具的功能很容易复制.您可以在web.config文件(或web.config.release中的转换)中指定数据库初始化程序以运行迁移.它看起来像以下(对于转换):

 <entityFramework>
     <contexts xdt:Transform="Insert">
       <context type="PlantonDbContextName, PlantonAssemblyName">
         <databaseInitializer
           type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[
               [PlantonDbContextName, PlantonAssemblyName], 
               [PlantonConfigurationName, PlantonAssemblyName]
             ], EntityFramework" />
       </context>
     </contexts> 
 </entityFramework>
Run Code Online (Sandbox Code Playgroud)

泛型在配置文件中很难看,但您也可以在代码中设置初始化程序:http://msdn.microsoft.com/en-us/library/hh829293(v = vs.103).aspx

希望有所帮助.