Entity Framework の子オブジェクトの挿入の防止
Entity Framework は、指定されたエンティティとともに関連する子オブジェクトを保存しようとすることが多く、これにより整合性が損なわれる可能性があります。問題。これを克服して子オブジェクトの挿入を防ぐには、複数の方法を使用できます。
Null 許容外部キーのプロパティ
デフォルトでは、Entity Framework は外部キーが Null 非許容であると想定します。 。子オブジェクトを null に設定できるようにするには、外部キー プロパティを明示的に null 可能としてマークする必要があります。これは、モデル クラスで required 属性を false に設定することで実現できます。
例:
public class School { public int Id { get; set; } public string Name { get; set; } public int? CityId { get; set; } public City City { get; set; } } public class City { public int Id { get; set; } public string Name { get; set; } }
ただし、外部キー プロパティを null に設定すると、次のような問題が発生する可能性があります。検証エラー。
エンティティ エントリの状態Management
別のアプローチは、Entity Framework コンテキストで子オブジェクトの状態を手動で設定することです。これにより、子オブジェクトがすでに存在しており、保存すべきではないことがコンテキストに通知されます。
例:
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; } }
外部キー アプローチ
より堅牢な方法は、モデル クラスで外部キーを明示的に定義することです。属性で外部キー列名を指定すると、Entity Framework はリレーションシップを認識し、親オブジェクトのみを挿入します。
例:
public class School { public int Id { get; set; } public string Name { get; set; } [ForeignKey("City_Id")] public int City_Id { get; set; } public City City { get; set; } } public class City { public int Id { get; set; } public string Name { get; set; } }
結論
Null 許容外部キー プロパティの使用、エンティティ エントリ状態の管理、または明示的な定義外部キーは、Entity Framework が子オブジェクトを挿入するのを防ぐ方法を提供します。適切なアプローチは、特定の要件とモデルの設計によって異なります。
以上がEntity Framework が子オブジェクトを挿入しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。