私はEntityFramework Coreで遊んでいて、データベースファーストアプリケーションの実装に取り組んでいます。最初のScaffold-DbContextコマンドは問題なく機能し、希望どおりに編成されていない場合でも、すべてのエンティティを正しく作成します。これは、スキーマを使用して責任範囲を分割するSQL Serverデータベースであり、Scaffoldがそれらすべてを1つのフォルダーにスローするだけであるという事実はあまり気にしません。
それはさておき、データベースの更新が発生した後、Scaffoldを再実行してクラスを更新する方法があるかどうかを判断できませんでした。私が見つけることができる最も近い方法は、-forceパラメーターを指定してScaffold-DbContextコマンドを再実行することです。ただし、これにより、接続文字列をハードコーディングではなく構成値にポイントするなど、Context.csファイルに追加したカスタムコードも上書きされます。
これ に似た他のいくつかの質問を見てきましたが、それは最初の足場についてのみ話し、それ以上の更新については話しません。
これを行うために将来の変更を手動でコーディングする以外の方法はありますか?それがなければ、データベースファーストのアプローチはEFコアではまったく価値がないように思われます。
あなた自身が言ったように...データベースファーストアプローチの主な問題:モデルを手動で変更したり、名前の変更を開始したりしないでください。データベースがもう変更されないことが100%確実である場合を除きます。 100%確信が持てない場合は、自動生成されたモデルを使用してコーディングしてください。
Re-Scaffoldingは、モデルクラスで直接行われた変更を上書きし、変更または追加したものをすべて消去します。
ただし、自動マッピングによって上書きされない側で部分クラスを作成できます。
public partial class TableName
{
public string Name_of_a_property
{get; set;}
}
これは、自動マッピングによって影響を受けないことを確認しながら、エンティティにコードを追加するための優れた方法です。部分ビューの名前が自動生成されたクラスと同じであることを確認してください。すべて問題がないはずです。
再実行可能なスキャフォールドは、真のDB Firstアプローチに使用できます Antoine Pelletierによる回答 。
ただし、モデルをコードに最初にインポートするために、scaffoldがonceで使用されることが多く、その後、CodeFirstアプローチを続行します。リバースエンジニアリングを使用して、 https://docs.Microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db)で説明されている既存のデータベースに基づいてEntityFrameworkモデルを作成するプロセス