Entity Framework の既定の動作を理解する: 子オブジェクトの永続性
Entity Framework (EF) を利用する場合、広く採用されているオブジェクト リレーショナル マッピング (ORM) ) .NET のフレームワークでは、子に関するその動作を認識することが重要ですエンティティ。デフォルトでは、EF はエンティティが保存されるときに、関連付けられた子オブジェクトもエンティティと一緒に保存される必要があると想定します。ただし、このデフォルトのアクションは、特に子エンティティの永続化をスキップする場合に、望ましくない結果を招く可能性があります。
永続化から子エンティティを除外する理由
次のようなシナリオが発生する可能性があります。子エンティティの保存が望ましくない場合。たとえば、フラット ファイルなどの外部ソースからデータを手動で入力する場合、データベース内の既存のエンティティがすでに子エンティティの役割を果たしている可能性があります。データベースに重複を挿入すると、不整合や整合性の問題が発生する可能性があります。さらに、主キーを割り当てる前に子エンティティを保存すると、EF の適切な動作が妨げられる可能性があります。
選択的永続性の強制: Unchanged EntityState
子エンティティの永続化をスキップするという課題に対処するには、EntityState.Unchanged オプションを利用できます。子エンティティの状態を明示的に Unchanged に設定することで、保存操作中にそれを無視するように EF に指示します。
EntityState.Unchanged を使用したコード例
次のことを考慮してください。 City 子エンティティを持つ School エンティティがあると仮定したコード例:
public School Insert(School newItem) { using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); return newItem; } }
都市エンティティの状態が変更されない場合、EF はそれを保存操作から除外し、データベースを変更しないままにします。ただし、このアプローチでは、子エンティティの割り当てを手動で処理する必要があります。
代替ソリューション: 外部キーの利用
よりエレガントで柔軟なソリューションには、外部キーの利用が含まれます。子エンティティ内で外部キー プロパティを定義することにより、親エンティティとの関係を明示的に指定します。 EF は、提供された参照に基づいて、関連付けられたエンティティの状態を自動的に処理します。
外部キーを使用したコード例
これは、外部キーを使用した前のコード例の更新バージョンです。 :
public class School { public int Id { get; set; } public string Name { get; set; } [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } } public School Insert(School newItem, int cityId) { using (var context = new DatabaseContext()) { // Set child entity to null to prevent insertion newItem.City = null; // Specify foreign key relationship without adding the child entity newItem.City_Id = cityId; context.Set<School>().Add(newItem); context.SaveChanges(); return newItem; } }
この場合、City_Id を手動で設定し、City 参照を無効にして、EF に指示します。子エンティティを関与させずに外部キーを介して接続を確立します。このアプローチによりコードが簡素化され、EntityState を手動で管理する必要がなくなります。
結論
Entity Framework のデフォルトの動作を理解し、EntityState.Unchanged や外部キーの利用などの適切な手法を採用することで、開発者は子エンティティの永続性を制御およびカスタマイズして、望ましくない副作用を防ぎ、アプリケーション内のデータの整合性を確保できます。
以上がEntity Framework で子エンティティの永続性を制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。