'Scaffold-dbcontext' terimi bir cmdlet, işlev, komut dosyası dosyası veya çalıştırılabilir program adı olarak tanınmıyor


93

Asp.net core ile iskele kurmaya çalışırken bu komut

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

Bu hatayı verir.

scaffold-dbcontext: 'scaffold-dbcontext' terimi bir cmdlet, işlev, komut dosyası dosyası veya çalıştırılabilir program adı olarak tanınmaz. Adın yazımını kontrol edin veya bir yol dahil edilmişse, yolun doğru olduğunu doğrulayın ve tekrar deneyin. Satırda: 1 karakter: 1

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

Çözümü burada denedim ama benim için işe yaramıyor.

Nedeni / tedavisi ne olabilir?


Entityframework.tools'un project.json dosyanızın araçlar bölümünde olduğundan emin olun.
Tim Scriv

Yanıtlar:


230

Benim için görünüşe göre, Paket Yöneticisi konsolunda da çalıştıktan sonra işe yaradı:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Ayrıca şunlardan da emin olun:

  • İhtiyaçlarınıza bağlı olarak başvurulan diğer bağımlılıklara (örneğin Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) sahip olmak için.

  • PM konsolunun sağ üst köşesindeki komutlarınız için hedef olarak doğru montajı seçmek (unutarak çoğu zaman kandırılırım ...)

Karşılaştığım başka bir sorun: ayrı bir sınıf kitaplığında bulunan dbcontext ile aşağıdaki hatayla karşılaşıyordum:

Microsoft.EntityFrameworkCore.SqlServer adlı sağlayıcı derlemesi bulunamıyor. Belirtilen adın doğru olduğundan ve proje tarafından referans verildiğinden emin olun.

VS'de sınıf kitaplığımı Başlangıç ​​projesi olarak ayarlayarak düzeltebildim (neden anlamsız göründüğünü sormayın, ama işe yaradı).

Geç düzenleme, bilmeniz gereken başka bir şey var: Scaffold-DbContext'i yalnızca .Net Standard'ı hedefleyen bir sınıf kitaplığına karşı çalıştıramazsınız, ayrıca içinde netcoreapp'i etkinleştirmeniz gerekir, aksi takdirde Scaffold-DbContext şikayet eder. Her iki hedefleri desteklemek için, düzenleme csproj koymak için: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Yerine<TargetFramework> Bölüm .

Tüm bunlardan sonra, Scaffold-DbContextkomut satırınızı uygun argümanlar ve bağlantı dizesi ile çalıştırabileceksiniz .


2
Bunun için teşekkürler. Çözümünüz, .net core 2.2 kullanan VS2019 için hala çalışıyor
PaulC

Ne yazık ki Microsoft bu son aylarda bunu geliştirmedi. Cevabımın bu kadar yardımcı olmasını beklemiyordum ve bir kısmı bazı garip IDE davranışları için zor bir geçici çözüm gibi göründüğü sürece ...
AFract

Hata ile karşılaştım: Microsoft.EntityFrameworkCore.SqlServer adlı sağlayıcı derlemesi bulunamıyor. Belirtilen adın doğru olduğundan ve proje tarafından referans verildiğinden emin olun. Ayrıca kaçak zorundaydı Microsoft.EntityFrameworkCore.SqlServer-Package yükleyin
Ahmed Faizan

@AhmedFaizan aslında yazıda bahsettiğimiz paket örneklerinden biridir.
Yardımcı olduğuna

1
NET Core 3.1 için gerekli ancak mysql resmi dokümantasyonu için gerekli değil, bu, bir mysql veritabanını önce mysql EF core ile iskele yapmak için kurulmalıdır. Elbette teşekkürler.
Leandro

17
  1. Bunun project.json dosyanızda "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final" içinde bulunduğundan emin olun.

görüntü açıklamasını buraya girin

  1. Komutu paket yöneticisi konsolunda çalıştırın

görüntü açıklamasını buraya girin

hepsi bu kadar işe yarayacak


9
aslında nuget paketini yükleyerek bunu düzeltirim: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung

@kepung - Bunu son VS2017 güncellemesinden sonra yapmak zorunda kaldım. Garip. Benim için sorunu çözdüğü için yorumunuz için teşekkür ederim.
KSwift87

12

VS'yi Yönetici olarak çalıştırdığınızdan ve aşağıdaki paketleri yüklediğinizden emin olun :

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

1
Benzer bir sorunum için Microsoft.EntityFrameworkCore.SqlServer.Design'ı kurmam gerekmedi ve geri kalanını kurdum ve düzgün çalışıyor.
MinaMRM

12

Aynı sorunu yaşadım. Benim durumumda bazı bağımlılıkları kaçırıyordum, bu yüzden aşağıdakilere sahip olduğunuzdan emin olun:

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

görüntü açıklamasını buraya girin

Umarım bu yardımcı olur. :)


Bunların 3'üne de sahibim ama yine de "Scafford-DbContext tanınmıyor" hatasını alıyorum. Microsoft.EntityFrameworkCore.SqlServer.Design eklemeyi denedim, ancak bu yardımcı olmadı.
Rod

3

Scaffoldkomut, dbcontextEF'deki komutun bir parçasıdır . Başarılı olmak için ayrıntılar aşağıdadır scaffold:

görüntü açıklamasını buraya girin

Paket referansları gerekli:

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

Yani iskele komutumuz şöyle görünmeli:

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

Kişisel Serverdeğeri, Db sunucu adı göre farklılık gösterebilir. MyDatabaseVeritabanı adınızla değiştirin masterve OutputDirectoryyeni oluşturduğunuz iskeleli sınıflarınızın Modelsklasör gibi olmasını istediğiniz konuma getirin .


2

NuGet Paket Yöneticisi'nden Microsoft.EntityFrameworkCore.Tools'u yükledim ve yüklü paketlerde göründü. Ama bu hatayı almaya devam ettim.

Visual Studio'nun (2019 / Sürüm 16.4.4) yeniden başlatılması benim için sorunu çözdü.


1

.NetCore 2.2 kullanıyorsanız, aşağıdaki komut benim için ya komut isteminde ya da Git Bash üzerinde bir cazibe işlevi görür. Komutu çalıştırmadan önce doğrudan proje klasöründe olduğunuzdan emin olun.

Örneğin C: \ App \ ProjeAdı:

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

1

Doğru konsolu, "Paket Yöneticisi Konsolu" nu kullandığınızdan emin olun. Ayrıca çok benzer görünen ancak bu komut için çalışmayan bir "Terminal" konsolu vardır. Paket Yöneticisi Konsolu, Görünüm -> Diğer Windows'ta bulunabilir (Visual Studio 2019, sürüm 16.6.5 itibarıyla)


-1

Yakın zamanda bu hatanın başka bir nedeniyle karşılaştım: NuGet'in kendisi güncel değil.

NuGet'in güncellenmesi sorunu çözdü.

Devanathan'ın cevabı sizin için işe yaramazsa NuGet'in kendisinin güncel olduğundan emin olun.


-2

Benim için ... komutu microsoft docs'dan kopyalayıp yapıştırırken, bazı nedenlerden dolayı kısa çizgilerin etrafına fazladan boşluk eklendi.

Kısa çizgileri kaldırmak sorunu çözdü:

yanlış:

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

iyi:

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

Belgeler ayrıca, bu hatayı alırsanız Visual Studio'yu yeniden başlatmayı deneyin der.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.