web-dev-qa-db-ja.com

.Net StandardプロジェクトでEntity Frameworkコアをセットアップしようとしています

.NET Standard 2.0プロジェクトでEntityFrameworkCoreを簡単にセットアップできるかどうか疑問に思っていました。私はこれに従いました チュートリアル ですが、.NET CoreまたはFrameworkのいずれかが必要です。

このステップに到達したとき:

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

私はこのエラーを受け取りました:

スタートアッププロジェクト「projectName」は、フレームワーク「.NETStandard」を対象としています。このフレームワークに関連付けられたランタイムはなく、それを対象とするプロジェクトは直接実行できません。このプロジェクトでEntity Framework Core Package Managerコンソールツールを使用するには、このプロジェクトを参照する.NET Frameworkまたは.NET Coreを対象とする実行可能プロジェクトを追加し、スタートアッププロジェクトとして設定します。または、このプロジェクトをクロスターゲット.NET Frameworkまたは.NET Coreに更新します。

.NET Standardでエンティティをセットアップできるかどうか、または代わりに行うべきベストプラクティスがあるかどうか疑問に思っています。

25
Joe Jazdzewski

スタートアッププロジェクト「projectName」は、フレームワーク「.NETStandard」を対象としています。このフレームワークに関連付けられたランタイムはなく、それを対象とするプロジェクトを直接実行することはできません。このプロジェクトでEntity Framework Coreパッケージマネージャーコンソールツールを使用するには、このプロジェクトを参照する.NET Frameworkまたは.NET Coreを対象とする実行可能プロジェクトを追加し、スタートアッププロジェクトとして設定します。または、このプロジェクトをクロスターゲット.NET Frameworkまたは.NET Coreに更新します。

エラーメッセージはこれを意味します:executable.NET Standardプロジェクトのようなものはありません。それは単に複数の異なるランタイム用のタイプ転送メカニズムであるため、ランタイムはありません。

プログラミング用語で言えば、それは インターフェースをインスタンス化しようとすることに少し似ています です。実行する実装がないため、実行できません。

解決策は、アプリケーションを実行する実行可能プラットフォームを選択することです。実行可能ファイルから好きなだけ.NET Standardライブラリを参照できます(ランタイムと互換性がある場合)が、実行可能ファイル自体を.NET Standardで実行することはできません。実行するには、.NET Frameworkや.NET Coreなどのプラットフォームをターゲットにする必要があります。

つまり、コマンドを使用してデータベースをスキャフォールドするには、ランタイムをターゲットにする必要があります。そのため、メインの実行可能プロジェクトをターゲットとしてこのコマンドを実行するか、ソリューションに新しい実行可能プロジェクトを追加して実行する必要があります。

23
NightOwl888

ここで最初の答え。私も実際にこれをやろうとしています。足場を手に入れましたが、Net Standardはテーブルプロパティの拡張機能をロードしていないようです。

EF用のEntityFrameworkCore.Toolsパッケージを必ずインストールしてください。デフォルトの4.6.1サポートのみが必要です。拡張機能の問題を修正する方法を見つけたら、ここに投稿します。

これら2つは必須です。インストールパッケージMicrosoft.EntityFrameworkCore.SqlServerインストールパッケージMicrosoft.EntityFrameworkCore.Tools

2
Christian H
  1. プロジェクト内の.NET Coreアプリを右クリックします

  2. [スタートアッププロジェクトとして設定]をクリックします

2
Majid joghataey

ソリューションに実行可能なスタートアッププロジェクトが既にあると仮定して、以下はdotnet CLIから動作します。

dotnet ef dbcontext scaffold "Server=myServerName; Database=dbName; User Id=someUser; Password=myPassword123;" Microsoft.EntityFrameworkCore.SqlServer  --project ../MyLibraryProject/ -c MyDbContext -o FolderName

詳細についてはこちらをご覧ください。

https://docs.Microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#other-target-frameworks

0
bbqchickenrobot