Entity Framework での子オブジェクトの永続性の抑制
Entity Framework では、通常、エンティティを保存すると、その子オブジェクトが自動的に永続化されると想定されています。良い。ただし、特定のシナリオでは、この動作を防止することが望ましい場合があります。これは、データベース スキーマに直接対応しない可能性のあるフラット化されたデータを扱う場合に特に便利です。
School エンティティに City プロパティが含まれる仮説的なシナリオを考えてみましょう。フラット ファイルから School オブジェクトを設定する際、City プロパティはルックアップ テーブルを参照して地理的位置を決定する場合があります。ただし、これらの都市定義はデータベースにすでに存在しているため、学校を保存するときに Entity Framework がそれらを再度挿入する必要はありません。
このような状況で Entity Framework が子オブジェクトを永続化しないようにするには、2 つの方法があります。 :
アプローチ 1: EntityState を使用する
1 つのアプローチは手動で行う必要があります子オブジェクトの EntityState を Unchanged に設定します。これは、保存操作中に子オブジェクトを無視するように Entity Framework に指示します。以下に例を示します。
using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); // Set the City property to Unchanged context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); }
アプローチ 2: 外部キーの使用
より洗練された柔軟なアプローチは、エンティティ定義で外部キー プロパティを利用することです。子プロパティに外部キー属性を定義して、外部エンティティとの関係を明示的に指定します。例:
public class School { [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } }
この方法では、オブジェクトの作成中に外部キー値を明示的に指定し、子オブジェクトがすでに永続化されていることを Entity Framework に通知できます。 City プロパティは、保存時に null に設定することでコンテキスト グラフから省略できます。
newItem.City = null; context.Set<School>().Add(newItem); context.SaveChanges();
これらのアプローチのいずれかを採用することで、Entity Framework が子オブジェクトを保存しようとするのを防ぎ、子オブジェクトのみが保存されるようにすることができます。必要なエンティティがデータベースに保存されます。
以上がEntity Framework が子オブジェクトを永続化しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。