2011-06-16 4 views
0

これに関連してSE上で多くの投稿が見られましたが、質問に満足できる回答はありませんでした。これに答える投稿がある場合(実際のコード例で)、その方向で私を指摘してください。Entity Framework 4:親を保存するときに、子オブジェクトの元の値を取得するにはどうすればよいですか?

オブジェクトを保存するときに情報をログに書き込む必要があります。私は元の値と新しい値を知る必要があります。これは親オブジェクトにとっては非常に簡単です。新しいの値を変更された子オブジェクトに適用することもかなり簡単です。問題は、オリジナルの子オブジェクトの値を取得することです。

たとえば、ユーザーは、ドロップダウンリストを使用して子オブジェクトを変更します。これにより、親の外部キーの値が変更されます。保存するときに、変更されたエンティティのテキスト記述(ToString()値または他の値)を外部キーの値ではなくログに書き出す必要があります。

ObjectStateEntryには現在の値と親の元の値が含まれていますが、変更された子オブジェクトの現在の値と元の値はどのようにして取得できますか?

これは可能なはずですが、達成するのが非常に困難であるか、マイクロソフトの設計チームによって見落とされているようです。

ご協力いただきありがとうございます。

+0

なぜあなたは 'var entity = context.Entry(あなたの子エンティティインスタンス); 'を使って変更を取得できませんし、' entity.OriginalValues'を使用していますか? – Eranga

+0

私はすべてのオブジェクトの名前をハードコードしたいと思っていましたが、オブジェクトを調べることができ、変更されたものの古い値と新しい値を取得し、外部キーにするには、関係のオブジェクトの古い値と新しい値を取得します。 – camainc

答えて

0

あなたはいつもそれを得るのと同じように:あなたはそれを見ます。あなたのケースでは、 "子オブジェクト"はDBから読み込まれないこともあります。 「親」のFK値を変更する前に、にはという要件があります。

「子オブジェクト」自体を実際に変更したようには聞こえません。ではなく、異なる子オブジェクトを指し示すように、「親」を変更しました。

この場合、Context.GetObjectByKey()を使用して元のFK値に基づいてオブジェクトをプルします。これは、ロードされた場合はメモリから取得し、ロードされない場合はDBから取得します。

+0

ありがとうございます。私の場合、子オブジェクトがロードされ、外部キーへの変更に基づいて新しい値が表示されますが、私はあなたのポイントを見ます。元の値を取得するためにdbから子エンティティをリロードする必要があるかもしれないと思ったが、それは非常に高価だったようだ。私はよく慣れていないGetObjectByKey()メソッドを試してみます。 – camainc

関連する問題