2

Order オブジェクトを持つ Customer オブジェクトがあるとします。Order オブジェクトには OrderDetail オブジェクトがあります。

Customer oCustomer 
using(var context = new MyContext)
{
oCustomer = context.Include("Order.OrderDetail").Find(1);
}
oCustomer.Name ="blah blah";
oCustomer.Order.Description = "blah blah";
oCustomer.Order.OrderDetail.Quantity = 10;

Customer の状態を次のように変更すると、次のようになります。

using(var context = new MyContext)
{
    context.Entry(oCustomer).State = EntityState.Modified.
    context.SaveChanges();
}

これにより、oCustomer オブジェクトのみが保存され、oCustomer にある Order および OrderDetail は保存されません。context.Entry(oCustomer).State = EntityState.Modified は oCustomer の状態のみを変更し、Order と OrderDetail は変更しないためです。現在、変更が保存されるように、ObjectGraph 内の各エンティティの状態を手動で変更する必要があります。親エンティティだけでなく、ObjectGraph 全体の状態を変更する方法はありますか? それを行うための拡張メソッドまたは他の方法はありますか?

4

1 に答える 1

4

コンテキストとエンティティの間のリンクを切断しているので、いいえ。すべてのエントリが変更された状態であることを自動的に認識することはできません。

独自の拡張メソッドを作成 (または派生オブジェクト コンテキスト クラスに追加) して、すべてのプロパティを調べて、構成でマップされているかどうかを確認し、マップされている場合は変更済みに設定することができます。

切断された環境で作業していると思いますが、最も簡単な方法は、他のプロセスで行ったすべての変更をやり直すことです。データベースからエンティティを再度ロードし、プロパティを設定して変更の保存を呼び出します。

于 2011-08-10T09:16:10.867 に答える