ホームページ > バックエンド開発 > C++ > 親エンティティを保存するときに Entity Framework が子エンティティを保存しないようにするにはどうすればよいですか?

親エンティティを保存するときに Entity Framework が子エンティティを保存しないようにするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-02 13:20:39
オリジナル
409 人が閲覧しました

How to Prevent Entity Framework from Saving Child Entities When Saving a Parent Entity?

Entity Framework が子オブジェクトを保存しないようにする方法

Entity Framework を使用する場合、エンティティを保存すると、関連付けられた子エンティティを誤って保存しようとする場合があります。これを修正し、指定されたエンティティのみを永続化するには、次のアプローチを検討してください。

EntityState を使用する

子オブジェクトの EntityState を Unchanged に設定して、Entity Framework に通知できます。それを残すuntouched:

using (var context = new DatabaseContext())
{
    context.Set<School>().Add(newItem);
    context.Entry(newItem.City).State = EntityState.Unchanged;
    context.SaveChanges();
}
ログイン後にコピー

外部キーの利用

より柔軟なアプローチには、外部キーの利用が含まれます。エンティティを定義するときは、子エンティティで外部キー プロパティを指定し、親エンティティで対応する主キー プロパティを指定します。

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
}

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; }
}
ログイン後にコピー

エンティティの挿入中に、子オブジェクトの外部キー プロパティを明示的に設定し、親オブジェクトの外部キー プロパティを設定します。 Navigation プロパティを null:

    public School Insert(School newItem, int cityId)
    {
        if (cityId <= 0)
        {
            throw new Exception("City ID not provided");
        }

        newItem.City = null;
        newItem.City_Id = cityId;

        using (var context = new DatabaseContext())
        {
            context.Set<School>().Add(newItem);
            context.SaveChanges();
        }
    }
ログイン後にコピー

これらの手法に従うことで、子オブジェクトの永続性を制御し、必要なエンティティのみが保存されるようにすることができます。潜在的な整合性の問題を防ぎます。

以上が親エンティティを保存するときに Entity Framework が子エンティティを保存しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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