質問: serviceScope.ServiceProvider.GetService(); context.Database.Migrate(); context.EnsureSeedData(); } } ``` しかし、同じ投稿では、データを手動でシードすることも推奨されています。 > 複数のサーバーが存在する場合の競合状態や意図しない変更を避けるため、一般的にこれらの操作を手動で適用することをお勧めします(移行を実行して起動時に自動的にシードするのではなく)。 > > これは私が好むと、次のようにドットネットツールを使用しています: ``` dotnet seed -c -s ``` ここで: - Contextは、使用されるDbContextです。指定されていない場合、デフォルトが使用されます。 - SeedDataは、データ挿入ロジックを含むクラスです。 このようなカスタムドットネットツールを作成することは可能ですか? ツール内でDbContextを使用できますか?
回答: プロジェクトのアセンブリをロードする汎用の`dotnet` CLIツールを作成することは自明ではありません。 aspnet / EntityFramework.Toolsとaspnet / EntityFramework reposで掘り出し始めることができます。一般的なプロセスフローは次のとおりです。 1. `dotnet`呼び出す`dotnet-ef.dll` 2. `dotnet-ef`はMSBuildを介してプロジェクトに関する情報(ターゲットフレームワークとランタイムアーキテクチャなど)を`ef.exe` (または`dotnet ef.dll` )を呼び出して、 3. `ef.exe`は、 `Microsoft.EntityFrameworkCore.Design.dll`とプロジェクトアセンブリ( `AppDomain`またはReflection経由)を読み込み、 `OperationExecutor`を呼び出します 4. `Microsoft.EntityFrameworkCore.Design`は`DbContext`をインスタンス化し、その`DbContext`を実行します。 プロジェクトを汎用性が低く、プロジェクト固有のものにすることで、これを劇的に簡素化できます。さらに、 `dotnet`ツールの代わりにコンソールアプリケーションを作成するだけで