Database First Scaffold-DbContext上的"构建失败"

Lig*_*End 54 c# entity-framework-core

我正在尝试从数据库生成类(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
Run Code Online (Sandbox Code Playgroud)

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

Using startup project 'EFSandbox'.
Using project 'EntityFrameworkCore'
Build started...
Build failed.
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*ver 107

首先确保在运行新的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

  • 令人讨厌的是,您似乎需要能够构建整个解决方案。我在其他项目中有错误,但是脚手架的项目很好。解决方案是选择其他项目并“卸载”它们。然后脚手架,然后重新加载。 (3认同)
  • 例如,如果您删除了实体文件,您会怎么做?脚手架将无法工作,因为您缺少此文件,但它也不会搭建脚手架,因为它无法构建。很烦人。 (2认同)
  • --> 确保您的项目完全构建<-- 好! (2认同)

Joe*_*mer 6

由于上述原因,重建项目解决方案解决了这个问题。对我个人来说,一些重要的警告是:

  1. 运行还dotnet build不够(我原以为是这样)!
  2. 在 Visual Studio 菜单中,“构建”>“构建解决方案” (Ctrl + Shift + B)
    • dotnet build我相信我只是尝试在子项目(myProject.data)内运行命令
    • 重建父项目(myProject)解决方案是关键

我希望这能帮助其他同样困惑的人!


bcr*_*bcr 5

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

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

  • 创建一次性 ASP.NET Core Web 应用程序解决方案
  • 将 EF Core NuGet 包添加到解决方案
  • 添加 EF Core Sql Server 提供程序 NuGet 包(因为我使用的是 SqlServer)
  • 添加 EF Core Tools NuGet 包
  • 切换-Project包管理器控制台命令以指向我新创建的(和 EF Core 配置的)项目。最后一步只是为了更好的衡量,因为我的一次性解决方案中只有一个项目。

似乎整个过程都需要解决方案中某处的 ASP.NET 核心项目(或只是一个不是类库的 .NET 核心项目),大概也设置为解决方案启动项目。

  • 这可能是此页面上最有用的条目之一。-verbose 标志应该朝正确的方向推动,因为它涵盖了脚手架可能出错的多种情况。 (2认同)

小智 5

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


mel*_*ent 5

我知道这很老了,但是今天我花了一段时间尝试解决这个问题,所以我希望这对某人有帮助。

我有一个.Net Core项目,但我想将文件存放到.Net Standard类库中。DbContext-Scaffold在软件包管理器控制台中对我不起作用,但是dotnet ef dbcontext scaffold在常规命令提示符下却有效。

我必须在类库中安装以下软件包:

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

我的解决方案中必须将.Net Core项目设置为启动项目,并且该项目必须具有对我的类库的引用。我认为最后一部分是我所缺少的,这使我挠挠了很长时间。

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

dotnet ef dbcontext scaffold "<connection string>" Microsoft.EntityFrameworkCore.SqlServer -o <output folder> -s <relative path to my startup project>
Run Code Online (Sandbox Code Playgroud)


Jos*_*egl 5

确保您的项目没有运行,由于某种原因,当我的 API 在后台运行时,此命令不起作用。