คำว่า 'scaffold-dbcontext' ไม่ได้รับการยอมรับว่าเป็นชื่อของ cmdlet ฟังก์ชันไฟล์สคริปต์หรือโปรแกรมที่ทำงานได้


93

เมื่อพยายามนั่งร้านด้วย asp.net core คำสั่งนี้

scaffold-dbcontext "Data Source=(local);Initial
Catalog=MyDb;Integrated Security=True;"
Microsoft.EntityFrameworkCore.sqlserver -outputdir Models

ให้ข้อผิดพลาดนี้

scaffold-dbcontext: คำว่า 'scaffold-dbcontext' ไม่รู้จักว่าเป็นชื่อของ cmdlet ฟังก์ชันไฟล์สคริปต์หรือโปรแกรมที่ทำงานได้ ตรวจสอบการสะกดของชื่อหรือถ้ามีพา ธ ตรวจสอบว่าพา ธ ถูกต้องแล้วลองอีกครั้ง ที่บรรทัด: 1 อักขระ: 1

+ scaffold-dbcontext "Data Source=(local);Initial Catalog=MyDB;In ...
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (scaffold-dbcontext:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

ฉันได้ลองวิธีแก้ปัญหาที่นี่แล้ว แต่มันไม่ได้ผลสำหรับฉัน

มีความคิดว่าสาเหตุ / การรักษาคืออะไร?


ตรวจสอบให้แน่ใจว่า entityframework.tools อยู่ในส่วน tools ของ project.json ของคุณ
Tim Scriv

คำตอบ:


229

สำหรับฉันเห็นได้ชัดว่ามันใช้งานได้เมื่อฉันรันในคอนโซล Package Manager:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

ตรวจสอบให้แน่ใจว่า:

  • เพื่อให้มีการอ้างอิงอื่น ๆ (เช่น Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ... ) อ้างอิงตามความต้องการของคุณ

  • เพื่อเลือกแอสเซมบลีที่เหมาะสมเป็นเป้าหมายสำหรับคำสั่งของคุณที่มุมขวาบนของคอนโซล PM (ฉันมักจะหลงกลลืมมัน ...

ปัญหาอื่นที่ฉันพบ: ด้วย dbcontext ที่อยู่ในไลบรารีคลาสที่แยกต่างหากฉันพบข้อผิดพลาดต่อไปนี้:

ไม่พบแอสเซมบลีของผู้ให้บริการที่มีชื่อ Microsoft.EntityFrameworkCore.SqlServer ตรวจสอบให้แน่ใจว่าชื่อที่ระบุถูกต้องและอ้างอิงโดยโปรเจ็กต์

ซึ่งฉันสามารถแก้ไขได้โดยตั้งค่าไลบรารีคลาสของฉันเป็นโปรเจ็กต์เริ่มต้นใน VS (อย่าถามว่าทำไมดูเหมือนไม่มีความหมาย แต่มันใช้งานได้)

การแก้ไขล่าช้ามีสิ่งอื่นที่ควรทราบ: คุณไม่สามารถเรียกใช้ Scaffold-DbContext กับไลบรารีคลาสที่กำหนดเป้าหมายเฉพาะ. Net Standard คุณต้องเปิดใช้งาน netcoreapp ในนั้นไม่เช่นนั้น Scaffold-DbContext จะบ่น ในการสนับสนุนเป้าหมายทั้งสองให้แก้ไข csproj เพื่อใส่: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> แทนที่จะเป็น<TargetFramework>ส่วน

หลังจากทั้งหมดนี้คุณจะสามารถเรียกใช้Scaffold-DbContextบรรทัดคำสั่งของคุณด้วยอาร์กิวเมนต์และสตริงการเชื่อมต่อที่เหมาะสม


2
ขอบคุณสำหรับสิ่งนี้. โซลูชันของคุณยังคงใช้ได้กับ VS2019 โดยใช้. net core 2.2
PaulC

น่าเสียดายที่ Microsoft ไม่ได้ปรับปรุงสิ่งนี้ในช่วงหลายเดือนที่ผ่านมา ฉันไม่ได้คาดหวังว่าคำตอบของฉันจะเป็นประโยชน์และตราบเท่าที่บางส่วนดูเหมือนจะเป็นวิธีแก้ปัญหาที่ยุ่งยากสำหรับพฤติกรรม IDE แปลก ๆ ...
เมื่อ

ฉันพบข้อผิดพลาด: ไม่พบแอสเซมบลีผู้ให้บริการที่มีชื่อ Microsoft.EntityFrameworkCore.SqlServer ตรวจสอบให้แน่ใจว่าชื่อที่ระบุถูกต้องและอ้างอิงโดยโปรเจ็กต์ ฉันต้องเรียกใช้: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan

@AhmedFaizan จริงๆแล้วมันเป็นหนึ่งในตัวอย่างของแพ็คเกจที่กล่าวถึงในโพสต์ ดีใจที่เป็นประโยชน์
หลัง

1
จำเป็นต้องใช้โดย NET Core 3.1 แต่ไม่ใช่โดยเอกสารอย่างเป็นทางการของ mysql สิ่งนี้จะต้องได้รับการติดตั้งเพื่อที่จะนั่งร้านฐานข้อมูล mysql ก่อนด้วย mysql EF core ขอบคุณแน่นอน
Leandro

17
  1. ตรวจสอบให้แน่ใจว่ามีอยู่ในไฟล์ project.json ของคุณ "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final"

ป้อนคำอธิบายภาพที่นี่

  1. รันคำสั่งในคอนโซลตัวจัดการแพ็คเกจ

ป้อนคำอธิบายภาพที่นี่

ทั้งหมดนี้จะได้ผล


9
ที่จริงฉันแก้ไขสิ่งนี้โดยการติดตั้งแพ็คเกจ nuget: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung

@kepung - ฉันต้องทำสิ่งนี้หลังจากการอัปเดต VS2017 ล่าสุด แปลก ขอบคุณสำหรับความคิดเห็นของคุณเนื่องจากสามารถแก้ปัญหาให้ฉันได้
KSwift87

12

ตรวจสอบให้แน่ใจว่าคุณเรียกใช้VS ในฐานะผู้ดูแลระบบและได้ติดตั้งแพ็คเกจต่อไปนี้:

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

1
สำหรับปัญหาที่คล้ายกันของฉันฉันไม่จำเป็นต้องติดตั้ง Microsoft.EntityFrameworkCore.SqlServer.Design และฉันได้ติดตั้งส่วนที่เหลือและทำงานได้อย่างถูกต้อง
MinaMRM

12

มีปัญหาเดียวกัน ในกรณีของฉันฉันไม่มีการอ้างอิงบางอย่างดังนั้นตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:

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

ป้อนคำอธิบายภาพที่นี่

หวังว่านี่จะช่วยได้ :)


ฉันมีทั้งหมด 3 รายการ แต่ฉันยังคงได้รับข้อผิดพลาด "Scafford-DbContext ไม่เป็นที่รู้จัก" ฉันลองเพิ่ม Microsoft.EntityFrameworkCore.SqlServer.Design แต่นั่นไม่ได้ช่วยอะไร
ร็อด

3

Scaffoldคำสั่งเป็นส่วนหนึ่งของdbcontextคำสั่งใน EF ด้านล่างนี้เป็นรายละเอียดสำหรับความสำเร็จscaffold:

ป้อนคำอธิบายภาพที่นี่

จำเป็นต้องอ้างอิงแพ็คเกจ:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0"/>

ดังนั้นคำสั่ง scaffold ของเราควรมีลักษณะดังนี้:

dotnet ef dbcontext scaffold "Server=localhost\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o OutputDirectory

Serverค่าของคุณอาจแตกต่างกันไปตามชื่อเซิร์ฟเวอร์ Db ของคุณ แทนที่MyDatabaseด้วยชื่อฐานข้อมูลของคุณเช่นmasterและOutputDirectoryตำแหน่งที่คุณต้องการคลาสนั่งร้านที่สร้างขึ้นใหม่เช่นModelsโฟลเดอร์


2

ฉันติดตั้ง Microsoft.EntityFrameworkCore.Tools จาก NuGet Package Manager แล้วและสามารถมองเห็นได้ในแพ็คเกจที่ติดตั้ง แต่ฉันยังคงได้รับข้อผิดพลาดนี้

การรีสตาร์ท Visual Studio (2019 / เวอร์ชัน 16.4.4) แก้ไขให้ฉัน


1

หากคุณกำลังใช้. NetCore 2.2 คำสั่งด้านล่างใช้งานได้ดีสำหรับฉันใน command prompt หรือ Git Bash ตรวจสอบให้แน่ใจว่าคุณอยู่ในโฟลเดอร์โครงการโดยตรงก่อนที่จะเรียกใช้คำสั่ง

ตัวอย่างเช่น C: \ App \ ProjectName:

 dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model

1

ตรวจสอบว่าคุณใช้คอนโซลที่ถูกต้องนั่นคือ "Package Manager Console" นอกจากนี้ยังมีคอนโซล "Terminal" ซึ่งมีลักษณะคล้ายกันมาก แต่ใช้ไม่ได้กับคำสั่งนี้ คอนโซลตัวจัดการแพ็คเกจสามารถพบได้ใน View -> Windows อื่น ๆ (ณ Visual Studio 2019 เวอร์ชัน 16.6.5)


-1

เมื่อเร็ว ๆ นี้ฉันพบสาเหตุอื่นของข้อผิดพลาด: NuGet เองก็ล้าสมัย

การอัปเดต NuGet ช่วยแก้ปัญหาได้

หากคำตอบของ Devanathan ไม่ได้ผลสำหรับคุณให้ตรวจสอบให้แน่ใจว่า NuGet เป็นข้อมูลล่าสุด


-2

สำหรับฉัน ... เมื่อคัดลอกวางคำสั่งจาก Microsoft docs ด้วยเหตุผลบางประการจึงมีการเพิ่มระยะห่างเพิ่มเติมรอบ ๆ ขีดกลาง

การลบยัติภังค์แก้ไข:

ไม่ถูกต้อง:

Scaffold - DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer - OutputDir Models

ดี:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

เอกสารยังบอกด้วยว่าหากคุณได้รับข้อผิดพลาดนี้ให้ลองรีสตาร์ท Visual Studio

https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.