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

时间:2012-11-05 11:12:09

标签: asp.net asp.net-mvc visual-studio visual-studio-2012 ef-migrations

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

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

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

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

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

enter image description here

以下是我的屏幕:

enter image description here

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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>

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

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

希望有帮助

答案 1 :(得分: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>

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

希望有所帮助。

答案 2 :(得分:1)

让我采取刺痛并提出一个问题:

这是以前的VS2010项目吗? : - )

我问,因为转换过程无法将VS2010升级到VS2012并保持发布配置文件不变。编辑太多了。

最好的办法是删除您拥有的任何现有发布配置文件(文件)并重新创建新的发布配置文件。

确保首先通过Ode的答案指定正确的EF上下文。发布向导需要能够在创建配置文件之前查看您的上下文。

Entity Framework Code First Data Migrations not working with VS2012 Web Deploy