Istilah 'scaffold-dbcontext' tidak dikenali sebagai nama cmdlet, fungsi, file skrip, atau program yang dapat dioperasikan

93

Ketika mencoba perancah dengan inti asp.net perintah ini

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

Memberikan kesalahan ini.

scaffold-dbcontext: Istilah 'scaffold-dbcontext' tidak dikenali sebagai nama cmdlet, fungsi, file skrip, atau program yang dapat dioperasikan. Periksa ejaan nama, atau jika jalur disertakan, verifikasi bahwa jalur tersebut benar dan coba lagi. Pada baris: 1 karakter: 1

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

Saya telah mencoba solusi di sini , tetapi tidak berhasil untuk saya.

Tahu apa penyebab / penyembuhannya?

simon831
sumber
Pastikan entityframework.tools ada di bagian alat project.json Anda.
Tim Scriv

Jawaban:

229

Bagi saya tampaknya itu berhasil setelah saya juga menjalankan di konsol Package Manager:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Pastikan juga:

  • Untuk memiliki dependensi lain (misalnya Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) direferensikan tergantung kebutuhan Anda.

  • Untuk memilih perakitan yang tepat sebagai target untuk perintah Anda di sudut kanan atas konsol PM (Saya sering tertipu dengan melupakannya ...)

Masalah lain yang saya temui: dengan dbcontext yang terletak di perpustakaan kelas terpisah, saya mengalami kesalahan berikut:

Tidak dapat menemukan rakitan penyedia dengan nama Microsoft.EntityFrameworkCore.SqlServer. Pastikan nama yang ditentukan benar dan direferensikan oleh proyek.

Yang dapat saya perbaiki dengan mengatur perpustakaan kelas saya sebagai proyek Startup di VS (jangan tanya mengapa karena tampaknya tidak ada artinya, tetapi berhasil).

Pengeditan terlambat, ada hal lain yang perlu diketahui: Anda tidak dapat menjalankan Scaffold-DbContext terhadap perpustakaan kelas yang hanya menargetkan .Net Standard, Anda juga harus mengaktifkan netcoreapp di dalamnya, atau Scaffold-DbContext akan mengeluh. Untuk mendukung kedua target, edit csproj menjadi put: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Alih-alih <TargetFramework>bagian.

Setelah semua ini, Anda akan dapat menjalankan Scaffold-DbContextbaris perintah Anda dengan argumen dan string koneksi yang tepat.

Latih
sumber
2
Terima kasih untuk ini. Solusi Anda masih berfungsi untuk VS2019 menggunakan .net core 2.2
PaulC
Sayang sekali Microsoft tidak memperbaiki ini selama beberapa bulan terakhir ini. Saya tidak mengharapkan jawaban saya sangat membantu dan selama beberapa bagian darinya tampaknya merupakan solusi yang rumit untuk beberapa perilaku IDE yang aneh ...
AFract
Saya mengalami kesalahan: Tidak dapat menemukan rakitan penyedia dengan nama Microsoft.EntityFrameworkCore.SqlServer. Pastikan nama yang ditentukan benar dan direferensikan oleh proyek. Saya juga harus menjalankan: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan
@AhmedFaizan sebenarnya itu adalah salah satu contoh paket yang disebutkan di pos. Senang itu membantu
Latih
1
Diperlukan oleh NET Core 3.1 tetapi tidak oleh dokumentasi resmi mysql, ini harus diinstal untuk melakukan scaffold database mysql terlebih dahulu dengan inti mysql EF. Terima kasih tentunya.
Leandro
17
  1. Pastikan ini tersedia di file project.json Anda "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final".

masukkan deskripsi gambar di sini

  1. Jalankan perintah di konsol manajer paket

masukkan deskripsi gambar di sini

hanya itu yang akan berhasil

Devanathan.S
sumber
9
sebenarnya saya memperbaiki ini dengan menginstal paket nuget: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung
@kepung - Saya harus melakukan ini setelah pembaruan VS2017 baru-baru ini. Aneh. Terima kasih atas komentar Anda karena ini menyelesaikan masalah untuk saya.
KSwift87
12

Pastikan Anda menjalankan VS sebagai Administrator dan telah menginstal paket berikut:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools
Moji
sumber
1
Untuk masalah saya yang serupa, saya tidak perlu menginstal Microsoft.EntityFrameworkCore.SqlServer.Design dan saya menginstal sisanya dan berjalan dengan benar.
MinaMRM
12

Punya masalah yang sama. Dalam kasus saya, saya kehilangan beberapa dependensi, jadi pastikan Anda memiliki yang berikut:

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

masukkan deskripsi gambar di sini

Semoga ini bisa membantu. :)

eldinT
sumber
Saya memiliki ketiganya, tetapi saya masih mendapatkan kesalahan "Scafford-DbContext tidak dikenali". Saya mencoba menambahkan Microsoft.EntityFrameworkCore.SqlServer.Design, tetapi itu tidak membantu.
Batang
3

Scaffoldperintah adalah bagian dari dbcontextperintah di EF. Di bawah ini adalah detail untuk sukses scaffold:

masukkan deskripsi gambar di sini

Referensi paket diperlukan:

<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"/>

Jadi perintah perancah kami akan terlihat seperti:

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

ServerNilai Anda mungkin berbeda sesuai nama server Db Anda. Ganti MyDatabasedengan nama Database Anda seperti masterdan OutputDirectoryke lokasi yang Anda inginkan untuk kelas scaffold yang baru Anda buat seperti Modelsfolder.

Prasad Kaiche
sumber
2

Saya telah menginstal Microsoft.EntityFrameworkCore.Tools dari NuGet Package Manager dan itu terlihat di paket yang diinstal. Tapi saya terus mendapatkan kesalahan ini.

Memulai ulang Visual Studio (2019 / Versi 16.4.4) memperbaikinya untuk saya.

joym8
sumber
1

Jika Anda menggunakan .NetCore 2.2, perintah di bawah ini berfungsi seperti pesona bagi saya di command prompt atau Git Bash. Pastikan Anda langsung berada di folder proyek sebelum menjalankan perintah.

Misalnya C: \ App \ ProjectName:

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

Pastikan Anda menggunakan konsol yang benar, "Package Manager Console". Ada juga konsol "Terminal" yang terlihat sangat mirip, tetapi tidak berfungsi untuk perintah ini. Package Manager Console dapat ditemukan di View -> Other Windows (pada Visual Studio 2019, ver.16.6.5)

FloverOwe
sumber
-1

Saya mengalami penyebab lain dari kesalahan ini baru-baru ini: NuGet sendiri sudah usang.

Memperbarui NuGet menyelesaikan masalah.

Jika jawaban Devanathan tidak berhasil untuk Anda, periksa untuk memastikan NuGet itu sendiri mutakhir.

Brian Swift
sumber
-2

Bagi saya ... saat menyalin menempelkan perintah dari microsoft docs, untuk beberapa alasan spasi ekstra ditambahkan di sekitar tanda hubung.

Menghapus tanda hubung memperbaikinya:

salah:

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

baik:

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

Dokumen juga mengatakan jika Anda menerima kesalahan ini, coba mulai ulang Visual Studio.

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

Andrew
sumber