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

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

Mary-Kate Olsen
リリース: 2025-01-03 00:14:38
オリジナル
962 人が閲覧しました

How Can I Prevent Entity Framework from Persisting Child Objects?

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

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