最初の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コマンドを実行する前に、まずプロジェクトがビルドされていることを確認してください。

私によくあることは、1行のコードを書き始め、新しいDB列が必要であることを理解し、それを足場に入れようと試みることです。コードの半分書かれた行を持っています。おっとっと。


複数のDLLがある場合は、間違ったプロジェクトに生成されている可能性があります。それから、 'ビルド失敗'がいくつかの理由で発生しています。おそらく、そのプロジェクトにEFCoreがインストールされていない可能性があります。

パッケージマネージャコンソールにはDefault projectあり、それがおそらくあなたのファイルが終わったところです。

解決策は簡単で、あなたはあなたのオプションに-Projectスイッチを追加する必要があるだけです。

これは私が使用する完全なコマンドです:

Scaffold-DbContext -Connection "サーバー=(ローカル);データベース= DefenderRRCart;統合セキュリティ= True; Trusted_Connection = True;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess -force

注意:-forceはファイルを上書きしますが、もう存在しないファイルは削除しません。 DBからテーブルを削除する場合は、古いエンティティファイルを自分で削除する必要があります(Explorerで日付順にソートして古いものを削除するだけです)。

フルオプション: https : //docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext


人気のある回答

私はこれが古いことを知っています、しかし私は今日これを理解しようとするのにしばらく時間を費やしたので、私はこれが誰かに役立つことを願います。

私は。NetCoreプロジェクトを持っていますが、私は私のファイルを.Net標準クラスライブラリに足場にしたいです。パッケージマネージャコンソールのDbContext-Scaffoldは私にとってはdotnet ef dbcontext scaffoldませんdotnet ef dbcontext scaffoldが、通常のコマンドプロンプトではdotnet ef dbcontext scaffoldはできました。

これらのパッケージをクラスライブラリにインストールする必要がありました。

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

私のソリューションは、.Net Coreプロジェクトをスタートアッププロジェクトとして設定する必要があり、そのプロジェクトにはクラスライブラリへの参照が必要でした。最後の部分は、私が足を引っ張っていたために欠けていた部分だと思います。

最後に、コマンドプロンプトからクラスライブラリにcdして実行しました。

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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ