Database First Scaffold-DbContext上的“構建失敗”

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

這行代碼生成錯誤(啟用-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


熱門答案

我知道這已經過時了,但我今天花了一些時間試圖解決這個問題,所以我希望這對某人有所幫助。

我有一個.Net Core項目,但我想將我的文件搭建到.Net標準類庫中。包管理器控制台中的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>


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow