【问题标题】:Publishing my database (package deploy) with Code First Migrations使用 Code First 迁移发布我的数据库(包部署)
【发布时间】:2012-11-05 11:12:08
【问题描述】:

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

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

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

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

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

下面是我的屏幕:

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    您可以通过编辑 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。

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

    希望有所帮助

    【讨论】:

    • 嗨,多米尼克,感谢您的回答。我有一个非常奇怪的问题,没有明显的原因,Web Deploy 和 Entity Framework Power Tools 停止看到 DbContext。我按照您的说明进行了编辑并修复了它。谢谢。
    • 这对我有用......只有当我创建一个新的对象组时......它不会添加到“默认连接”对象组中
    • 确实,将 DbContext 类的全名作为 ObjectGroup 的名称很重要。谢谢!
    【解决方案2】:

    我也见过这种情况。我不确定部署工具使用什么启发式方法来识别 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

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-03
        • 1970-01-01
        • 2014-10-08
        • 2013-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多