6

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

现在,我更改了我的解决方案并使用 Code First 迁移。需要时(实体更改),我通过“包管理器控制台”(更新数据库)更新我的本地数据库。

我的问题:我需要做什么来更新公司 IIS 上的数据库?

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

下面是在文档页面上看到的屏幕:

在此处输入图像描述

下面是我的屏幕:

在此处输入图像描述

任何帮助是极大的赞赏。

4

3 回答 3

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。

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

希望有所帮助

于 2012-11-14T22:13:51.797 回答
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

希望有帮助。

于 2012-11-06T13:49:39.330 回答
1

让我试一试,问一个问题:

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

我问是因为转换过程无法将 VS2010 升级到 VS2012 并保持发布配置文件完整。只是编辑太多。

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

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

实体框架代码优先数据迁移不适用于 VS2012 Web 部署

于 2012-12-26T02:01:25.017 回答