Visual studio 2015 发布时应用EF迁移仅适用于某些web项目

Visual studio 2015 发布时应用EF迁移仅适用于某些web项目,visual-studio-2015,asp.net-core,publish,entity-framework-core,entity-framework-migrations,Visual Studio 2015,Asp.net Core,Publish,Entity Framework Core,Entity Framework Migrations,我有几个使用Asp.NETCore1.0和EntityFrameworkCore1.1.0的项目 我采用代码优先的迁移方法,并通过Visual Studio 2015发布到Azure 我在Azure Sql Server中应用迁移的方法是在发布时启用一个复选框:“实体框架迁移-在发布时应用此迁移”,在该复选框中我键入了一个连接字符串 我更新了几个包,现在对于我的一个项目,我再也看不到在发布时应用迁移的选项。我可以看到,它试图发现数据上下文,但没有发现任何内容(尽管它在同一个项目中..) 见下文:

我有几个使用Asp.NETCore1.0和EntityFrameworkCore1.1.0的项目

我采用代码优先的迁移方法,并通过Visual Studio 2015发布到Azure

我在Azure Sql Server中应用迁移的方法是在发布时启用一个复选框:“实体框架迁移-在发布时应用此迁移”,在该复选框中我键入了一个连接字符串

我更新了几个包,现在对于我的一个项目,我再也看不到在发布时应用迁移的选项。我可以看到,它试图发现数据上下文,但没有发现任何内容(尽管它在同一个项目中..)

见下文:

  • 发布时可以在Azure上应用迁移的项目:

  • 发布时在Azure上应用迁移的选项消失的项目:

我怀疑这与项目的某些依赖版本有关,而与我的IDE无关,因为我对这两个项目使用的是相同的Visual Studio(2015 update 3)

我找不到这方面的信息。什么依赖关系允许此选项?如果我发现哪个版本有问题,那么剩下的问题是发布时如何应用迁移

这两个项目都在Web项目中进行了迁移,并且两个项目都使用了
“Microsoft.AspNetCore.Identity.EntityFrameworkCore”:“1.1.0”

更新1:我设法找到了其中的原因。似乎如果我使用这些依赖项:

"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
VisualStudio能够找到数据上下文,并提供在发布时应用迁移的选项。但如果我使用这些依赖项的更新版本,如:

"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Design": "1.1.0"
然后,应用迁移的选项消失了,VS在发布时找不到任何数据上下文


我需要了解迁移和Asp.Net Core的最新状态。

在创建空的Asp.Net Core Web API项目并添加迁移后,我在Visual Studio 2017中偶然发现了一个非常类似的问题(发布无法在要发布的项目中查找数据上下文)

为了使其正常工作,我在.csproj文件中包括了以下几行:

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" />

要使用迁移,可以使用软件包管理器控制台(PMC)或命令行界面(CLI) 使用PMC时,在发布期间不会发现EF迁移。 通过使用CLI,将显示EF迁移部分


出于好奇:在应用程序启动期间调用
dbcontext.Database.MigrateAsync()
有什么问题?当您将其部署到azure并使用部署槽时,它将执行部署应用程序,然后ping一次以确保在将其与生产槽交换之前预热应用程序。围绕这一点存在一些争论。就我个人而言,我喜欢在部署应用程序之前应用迁移,这样,如果迁移失败,当前应用程序和生产中的数据库就不会有任何问题。而如果它作为启动的一部分出现在代码中,则意味着必须首先部署应用程序,然后应用迁移。如果迁移失败,那么应用程序将停止工作,并且必须重新部署以前的版本。但是我可以考虑使用<代码> dBase.Dava.ListAtActhyCy]()/代码>如果有好的参数这样做的话,那就是为什么我提到Azure的部署时隙:DOCS.MySo.CON/EN-US/Azuri/App-Service Web/Web-SITES-STED发布(特别是“与预览交换(多阶段交换))部分)。基本上,您可以在暂存槽中发布应用程序,如果您可以触发预热(调用一些url强制IIS启动您的应用程序),然后开始切换这两个应用程序。我想你也可以把它设置为只有在调用预热的url成功的情况下才更改,但现在还不能确定不是Azure中的所有计划都有多个部署槽。。目前,我正处于基础阶段,所以这不是我的选择。但是,是的,这对允许这样做的计划来说听起来不错。我发现相关的。您需要在
project.json中添加
“postpublish”:[“dnx ef数据库更新-e Staging”]