「scaffold-dbcontext」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。


93

asp.netコアで足場を組もうとするときこのコマンド

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

このエラーが発生します。

足場-dbcontext:「足場-dbcontext」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認して、再試行してください。行:1文字:1

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

私はここで解決策を試しましたが、うまくいきません。

原因/治療法は何である可能性がありますか?


entityframework.toolsがproject.jsonのツールセクションにあることを確認してください。
Tim Scriv 2016

回答:


231

私にとっては、パッケージマネージャーコンソールでも実行すると、明らかに機能しました。

 Install-Package Microsoft.EntityFrameworkCore.Tools 

また、次のことを確認してください。

  • 必要に応じて、他の依存関係(たとえば、Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.SqlServer.Design ...)を参照します。

  • PMコンソールの右上隅にあるコマンドのターゲットとして適切なアセンブリを選択するには(忘れてしまうことがよくあります...)

私が遭遇した別の問題:別のクラスライブラリにあるdbcontextで、次のエラーが発生しました:

Microsoft.EntityFrameworkCore.SqlServerという名前のプロバイダーアセンブリが見つかりません。指定された名前が正しく、プロジェクトによって参照されていることを確認してください。

クラスライブラリをVSのスタートアッププロジェクトとして設定することで修正できました(意味がないように見えるので理由を聞かないでくださいが、機能しました)。

後期編集、知っておくべきことが他にあります。.NetStandardのみを対象とするクラスライブラリに対してScaffold-DbContextを実行することはできません。また、netcoreappを有効にする必要があります。そうしないと、Scaffold-DbContextが文句を言います。両方のターゲットをサポートするには、csprojを編集して<TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks><TargetFramework>セクションの代わりに:を配置します。

これらすべての後Scaffold-DbContext、適切な引数と接続文字列を使用してコマンドラインを実行できるようになります。


2
これをありがとう。あなたの解決策はまだ.NETのコア2.2を使用してVS2019のために働く
PaulC

残念なことに、マイクロソフトはこの数か月間、これを改善しませんでした。私は私の答えはとても参考にして、あればの一部が表示されるためにいくつかの奇妙なIDEの行動のためのトリッキーな回避策は...であることを期待していなかった
AFract

エラーが発生しました:Microsoft.EntityFrameworkCore.SqlServerという名前のプロバイダーアセンブリが見つかりません。指定された名前が正しく、プロジェクトによって参照されていることを確認してください。また、次の
コマンド

@AhmedFaizanは、実際には、投稿で言及されているパッケージの例の1つです。うれしいことは参考になりました
AFract

1
NET Core 3.1で必要ですが、mysqlの公式ドキュメントでは必要ありません。これは、最初にmysqlEFコアでmysqlデータベースをスキャフォールディングするためにインストールする必要があります。もちろんありがとう。
レアンドロ

17
  1. これがproject.jsonファイル "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final"で利用可能であることを確認してください。

ここに画像の説明を入力してください

  1. パッケージマネージャーコンソールでコマンドを実行します

ここに画像の説明を入力してください

それが機能するすべてです


9
実際には、nugetパッケージをインストールしてこれを修正します:Install-Package Microsoft.EntityFrameworkCore.Tools
kepung 2017

@ kepung-最近のVS2017の更新後にこれを行う必要がありました。奇妙な。問題が解決したので、コメントありがとうございます。
KSwift87 2018年

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コマンドはdbcontextEFのコマンドの一部です。以下は成功のための詳細です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ようなデータベース名masterOutputDirectoryModelsフォルダのような新しく作成したスキャフォールドクラスが必要な場所に置き換えます。


2

NuGetパッケージマネージャーからMicrosoft.EntityFrameworkCore.Toolsをインストールしましたが、インストールされたパッケージに表示されていました。しかし、私はこのエラーを受け取り続けました。

Visual Studio(2019 /バージョン16.4.4)を再起動すると、修正されました。


1

.NetCore 2.2を使用している場合、以下のコマンドは、コマンドプロンプトまたはGitBashのいずれかで私にとって魅力のように機能します。コマンドを実行する前に、プロジェクトフォルダに直接アクセスしていることを確認してください。

例:C:\ App \ ProjectName:

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

1

適切なコンソールである「パッケージマネージャーコンソール」を使用していることを確認してください。非常によく似た「ターミナル」コンソールもありますが、このコマンドでは機能しません。パッケージマネージャーコンソールは、[表示]-> [その他のウィンドウ]にあります(Visual Studio 2019、バージョン16.6.5以降)


-1

最近、このエラーの別の原因に遭遇しました。NuGet自体が古くなっていました。

NuGetを更新すると、問題が解決しました。

Devanathanの回答がうまくいかない場合は、NuGet自体が最新であることを確認してください。


-2

私にとって...マイクロソフトのドキュメントからコマンドをコピーして貼り付けると、何らかの理由でハイフンの周りに余分なスペースが追加されました。

ハイフンを削除すると修正されました。

違う:

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

ドキュメントには、このエラーが発生した場合は、VisualStudioを再起動してみてくださいと書かれています。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.