如何让 Visual Studio 发布 Web 向导相信我的数据库是 Entity Framework CodeFirst?

Posted

技术标签:

【中文标题】如何让 Visual Studio 发布 Web 向导相信我的数据库是 Entity Framework CodeFirst?【英文标题】:How do I convince the Visual Studio Publish Web wizard that my database is Entity Framework CodeFirst? 【发布时间】:2016-02-28 20:45:12 【问题描述】:

在 VS2015 中,当我在发布向导中打开现有发布配置文件时,它会立即确定我的默认数据库不再是 EF CodeFirst,并删除了执行 Code First 迁移的选项并将其替换为更新数据库。

不知何故,向导似乎决定这不再是 CodeFirst 项目,而是将其替换为 DbDacFx,如下所示:

<PublishDatabaseSettings>
  <Objects xmlns="">
    <ObjectGroup Name="DefaultConnection" Order="1" Enabled="True">
      <Destination Path="Data Source=*" />
      <Object Type="DbCodeFirst">
        <Source Path="DBMigration" DbContext="m4d.Context.DanceMusicContext, m4d" MigrationConfiguration="m4d.Migrations.Configuration, m4d" Origin="Configuration" />
      </Object>
    </ObjectGroup>
  </Objects>
</PublishDatabaseSettings>

转换为:

<PublishDatabaseSettings>
  <Objects xmlns="">
    <ObjectGroup Name="DefaultConnection" Order="1" Enabled="False">
      <Destination Path="Data Source=*" />
      <Object Type="DbDacFx">
        <PreSource Path="Data Source=*" includeData="False" />
        <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" />
      </Object>
      <UpdateFrom Type="Web.Config">
        <Source MatchValue="Data Source=*" MatchAttributes="$(UpdateFromConnectionStringAttributes)" />
      </UpdateFrom>
    </ObjectGroup>
  </Objects>
</PublishDatabaseSettings>

(我用*替换了各种连接字符串)

有人知道向导使用什么来确定这是一个 CodeFirst 项目吗?

这篇文章http://blogs.msdn.com/b/webdev/archive/2014/04/09/ef-code-first-migrations-deployment-to-an-azure-cloud-service.aspx 提供了一些关于如何推出自己版本的执行代码优先迁移选项的详细信息,并且是一种潜在的解决方法,但它曾经只是工作。

【问题讨论】:

我无法准确回答您的问题,但我注意到如果我重新启动 Visual Studio,该问题不会重现。 我已经重启了几次VS2015,但我仍然遇到你提到的问题。 我在使用 Visual Studio 2017 时遇到了同样的问题。 【参考方案1】:

在您的 .pubxml 文件中,您必须将 ObjectGroup 重命名为您的 Dbcontext 的全名:m4d.Migrations.Configuration。否则,它似乎被忽略了。

<PublishDatabaseSettings>
  <Objects xmlns="">
    <ObjectGroup Name="m4d.Migrations.Configuration" Order="1" Enabled="True">
      <Destination Path="Data Source=*" />
      <Object Type="DbCodeFirst">
        <Source Path="DBMigration" DbContext="m4d.Context.DanceMusicContext, m4d" MigrationConfiguration="m4d.Migrations.Configuration, m4d" Origin="Configuration" />
      </Object>
    </ObjectGroup>
  </Objects>
</PublishDatabaseSettings>

【讨论】:

以上是关于如何让 Visual Studio 发布 Web 向导相信我的数据库是 Entity Framework CodeFirst?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Visual Studio 的设计器在 ASP.NET Web 用户控件中正确呈现 CSS?

如何创建显示在 Web 类别中的 Visual Studio 项目模板?

如何让我的存储过程在我的 Visual Studio 项目中工作?

如何强制 Visual Studio 为运行 Kestrel 的 .NET Core Web 应用程序重新创建 SSL 证书?

如何防止 Visual Studio 在 Web 项目中“发布”XML 文档文件?

如何将 Web 服务从 Visual Studio 发布到 IIS?