2011-12-06 3 views
0

EF 4.0でセルフトラッキングエンティティグラフをどのようにクローンすることができますか?エンティティ(グラフの深いクローン=クローン)の深いクローンを取得する最も簡単な方法は、DataContractSerializerを使用してシリアライズし、すぐにそれをデシリアライズすることですのでEF 4.0のセルフトラッキングエンティティをクローンしますか?

おかげ

答えて

1

自己追跡エンティティは直列化可能です。デシリアライズされたエンティティがグラフのクローンになります。

+0

私は間違っているかもしれませんが、明示的に照会したデータに制限するのではなく、DBからデータを取得し始めると考えています。あなたが好きかどうかに関わらず、オブジェクトグラフ全体が得られます。 –

+1

@Merlyn:これはまさにこの問題を避けるためにレイジーなlodingをサポートしていないので、実際のSTEでは起こりません。 POCOでは、この作業を行うためにプロキシ作成をオフにする必要があります。 EntityObjectベースのエンティティは、シリアライズ可能として生成されるため、これをそのまま使用できます。 –

+0

「本物」とはどういう意味ですか? 「現実の男性はその機能を使用していない」、あるいはそれは価値のない/有害な機能である可能性があります。または、他の何か?あなたはそれについての参考資料を提供できますか?あなたには挑戦しません、私は学ぶためにここにあります:) –

0

「クローン」と言うときは、永続化する新しいエンティティを作成するか、同じエンティティのメモリ内コピーである別の「一時的な」エンティティを作成するだけですか?

メモリ内コピーを作成する場合は、常にエンティティクラスの新しいインスタンスを作成し、フィールドにコピーすることができます。あなたがそれについての文脈を伝えていないので、それに対する変更は追跡されません。

var newInstance = new SomeEntity() { SomeProperty = oldInstance.SomeProperty }; 

永続化する新しいエンティティを作成する場合は、新しいレコードを挿入する通常の操作を行います。例:変更を追跡するフルコピーを論理的に作成することはできませんが、同じインスタンスを参照します。どのバージョンのオブジェクトを取るのですか?

+0

メモリをコピーするだけでなく、深いクローンを永続化する – user440916

+0

@ user440916:次に、データベースの別のエントリとしてメモリ内のコピーを保持するコードの2番目のビットを調べます。 –

関連する問題