Database First Scaffold-DbContext上的“构建失败”

我正在尝试从数据库生成类(EntityFramework的数据库第一种方法)。

为方便起见,我或多或少地跟随本教程: https : //docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html

我正处于Visual Studio包管理器控制台中运行相当于这行代码的地步:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose 

这行代码生成错误(启用-Verbose模式):

 Using startup project 'EFSandbox'. Using project 'EntityFrameworkCore' Build started... Build failed. 

我没有看到任何产生任何有意义输出的选项,我看不到有关此特定错误的文档。 如果它有帮助,那么这个项目目前没有project.json文件。 一切都在.csproj文件中,我没有手动编辑。

首先确保在运行新的scaffold命令之前构建项目。

经常发生在我身上的是我将开始编写一行代码,需要实现一个新的DB列,去尝试搭建它 – 然后在20分钟后实现我的构建(和脚手架命令)失败的原因是因为我有一半写的代码。 哎呀。


如果您有多个DLL,则可能会生成错误的项目。 然后由于多种原因发生’构建失败’,很可能是因为您没有在该项目中安装EFCore。

在包管理器控制台中有一个Default project ,这可能是你的文件结束的地方。

解决方案很简单,您只需将-Project开关添加到您的选项中即可。

这是我使用的完整命令:

Scaffold-DbContext -Connection“Server =(local); Database = DefenderRRCart; Integrated Security = True; Trusted_Connection = True;” -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess -force

注意:-force将覆盖文件,但不会删除不再存在的文件。 如果从数据库中删除表,则必须自己删除旧的实体文件(只需按资源管理器按日期排序并删除旧文件)。

完整选项: https : //docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext

对我来说,问题是我试图在解决方案内部的一个新的空白控制台项目中设置它,它没有文件,所以脚手架试图将这个项目用作启动项目而找不到Main 。 我通过添加一个空主文件的新文件来修复它

手动构建项目Ctrl + Shift + B帮助我看到导致构建失败的错误。

即使我确保我的项目(已安装EF Core)正确构建,我仍然遇到此问题。 它仍然因“构建失败”而失败。 消息,使用-Verbsose标志时可见。

在我的情况下我必须这样做:

  • 创建一个抛弃的ASP.NET Core Web应用程序解决方案
  • 将EF Core NuGet包添加到解决方案中
  • 添加EF Core Sql Server提供程序NuGet包(因为我使用的是SqlServer)
  • 添加EF Core Tools NuGet包
  • Switch -Project在package manager console命令中指向我新创建的(和EF Core-provisioned)项目。 最后一步是好的措施,因为我的丢弃解决方案中只有一个项目。

似乎整个过程需要一个ASP.NET核心项目(或者只是一个不是类库的.NET Core项目),在解决方案的某个地方,也可能被设置为解决方案启动项目。

使用VS2017预览3,.NET Core 2(预览)我遇到了各种各样的问题,但最终我采用了上面提出的方法并创建了一个全新的解决方案。

  1. 创建了新的.NET Core解决方案
  2. 编辑项目文件并将1.0更改为2.0: netcoreapp2.0
  3. 关闭/重新开放的解决方案

然后,添加了entity framework:

  1. 在PackageManager控制台中:
    • 安装包Microsoft.EntityFrameworkCore.SqlServer -Version 2.0.0-preview2-final
    • 安装包Microsoft.EntityFrameworkCore.Tools -Version 2.0.0-preview2-final
    • 安装包Microsoft.EntityFrameworkCore.Design -Version 2.0.0-preview2-final
  2. 编辑项目文件,并添加:

然后;

  1. 打开Powershell命令提示符并将目录更改为Scaffold项目文件夹
  2. Ran:dotnet ef dbcontext scaffold“Server = DESKTOP-MB70B7U; Database = ForexForme; Trusted_Connection = True”Microsoft.EntityFrameworkCore.SqlServer -o Models
    • 你把自己的连接字符串放在哪里!
    • Models是我放置所有类的目录的名称

我知道这已经过时了,但是今天我花了一些时间试图解决这个问题,所以我希望这对某人有所帮助。

我有一个.Net Core项目,但我想将我的文件搭建到.Net标准类库中。 包管理器控制台中的DbContext-Scaffold对我来说不起作用,但在常规命令提示符中的dotnet ef dbcontext scaffold也可以。

我必须在我的类库中安装这些包:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.Tools

我必须在我的解决方案中将.Net Core项目设置为启动项目,该项目必须引用我的类库 。 我认为最后一部分是我所遗漏的,让我长时间不知所措。

最后,我从命令提示符进入类库并运行它:

 dotnet ef dbcontext scaffold "" Microsoft.EntityFrameworkCore.SqlServer -o  -s