ホームページ > バックエンド開発 > C++ > Entity Framework が子オブジェクトを挿入しないようにするにはどうすればよいですか?

Entity Framework が子オブジェクトを挿入しないようにするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-03 09:13:40
オリジナル
484 人が閲覧しました

How Can I Prevent Entity Framework from Inserting Child Objects?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート