4

Visual Studio SQL Server データベース プロジェクトから直接 EF Core をスキャフォールディングするにはどうすればよいですか?

次のような解決策が推奨されます。

scaffold-dbcontext -connection "provider=ssdtproject, name=myprojectname.sqlproj"
scaffold-dbcontext -ddl "ssdtprojectoutput.sql"
scaffold-dbcontext -ssdtschema "ssdtproject.dacpac"
maintained-third-party-tool myprojectname.sqlproj -EfModelGenerationParameters

それが全体の質問です。以下は私の状況の詳細です。代替ソリューションを提供できる場合があります。

MS は EF Core がまだ運用環境に対応していないことを認めていますが、EF 6 の進歩が止まってから 3 ~ 4 年が経過しています。このようにして、 「EF Core を使用することになります」というタイトルの物語が始まります。

この部分は意見が分かれていますが、私にとって (25 年以上のエンタープライズ ソフトウェアの設計と開発の経験に基づくと) Code-First は絶対に初心者ではありません。1 週目の小さなアプリケーションの概念には問題ありませんが、制約やビューなどを統合するための合理的なパターン/プロセス/プラクティスはありません。ビューが設計されていない場合、実際のビジネス アプリは開発者が LINQ 式で論理の基礎を繰り返すことになります。 LINQ-to-SQL クエリをサポートするためにコードに静的フィールドを散らかし、LinqKit を使用してマイクロ組み合わせパターンを混乱させるなどです。制約がなければ、実行時エラーを処理するための防御コード要件が 10 倍になり、ユニットが急速に開花します。および統合テスト、およびデモの失敗が標準になります。オブジェクト指向の専門家が SQL の専門家になるか、その逆か、そして、エンジニアを見つけて適切に補償することの難しさを大幅に高めています。これらの問題はすべて、4 年前に Rowan Miller との詳細な会話で指摘したものです (彼は最近 EF チームを去りましたが、これは短期的な解決策の前兆ではありません)。

モデル ファースト (.edmx以前の EF バージョンのビジュアル デザイナー) は、明らかにテーブルから外れています。これに対する MS の解決策は、コード ファーストが本当にモデル ファーストであると主張し、手を洗うことだったからです。したがって、真にニュートラルであり、明確にするために「コントラクト ファースト」と呼びましょう。このアプローチは EF Core には存在しません。

それで、その暴言(申し訳ありませんが、イライラします)は私をデータベースファーストに導きますScaffold-DbContext。当社の DB スキーマは現在、リビジョン管理された Visual Studio SQL Server データベース プロジェクトです。これに関するいくつかの既知の問題はさておき、DB スキーマ (現在は単一の真実) を取得し、そこからライブ データベースを再構築し、ライブ データベースからコードを逆生成する必要があるのはばかげているように思えます。データベース タイプのアライメントを確認するためだけに、ビルド プロセスの一部となります。代わりに、単純に変更を検出し、DbContext と関連するエンティティをデータベース プロジェクトから直接再生成できるようにしたいと考えています。

SSDT データベース プロジェクトは、通常データベース接続が必要な多くの UI で、データベースのようなオブジェクトを利用できるようにします。そのため、データベース スキーマを既存のツールのソースとして使用するのは簡単なことではないかと思います。たとえば、接続文字列でメタデータ プロバイダーを使用したり、EF Core コードを簡単に変更したりします。

SQL Sharpenerは、「設計時に SQL ファイルを信頼できるソース (SSDT プロジェクトで見つかったものなど) として使用して生成する」ものであり、以前のバージョンの EF でこの問題の解決策として推奨されていましたが、そうではありません。 EF Core をサポートしていません。

SQLite と SQL Server Compact Toolboxは、.DACPAC から直接 EF モデルを生成するためのサポートを追加したばかりですが、その機能はEntityFramework Reverse POCO Code First Generatorに依存しているように見えます。これは、 TODO Listに「EF Core のサポート」を目立つようにリストしています。このプロジェクトの主な貢献者は、その非互換性を確認しています。

ヘルプ?

4

1 に答える 1