EF 4.0でセルフトラッキングエンティティグラフをどのようにクローンすることができますか?エンティティ(グラフの深いクローン=クローン)の深いクローンを取得する最も簡単な方法は、DataContractSerializer
を使用してシリアライズし、すぐにそれをデシリアライズすることですのでEF 4.0のセルフトラッキングエンティティをクローンしますか?
おかげ
EF 4.0でセルフトラッキングエンティティグラフをどのようにクローンすることができますか?エンティティ(グラフの深いクローン=クローン)の深いクローンを取得する最も簡単な方法は、DataContractSerializer
を使用してシリアライズし、すぐにそれをデシリアライズすることですのでEF 4.0のセルフトラッキングエンティティをクローンしますか?
おかげ
自己追跡エンティティは直列化可能です。デシリアライズされたエンティティがグラフのクローンになります。
「クローン」と言うときは、永続化する新しいエンティティを作成するか、同じエンティティのメモリ内コピーである別の「一時的な」エンティティを作成するだけですか?
メモリ内コピーを作成する場合は、常にエンティティクラスの新しいインスタンスを作成し、フィールドにコピーすることができます。あなたがそれについての文脈を伝えていないので、それに対する変更は追跡されません。
var newInstance = new SomeEntity() { SomeProperty = oldInstance.SomeProperty };
永続化する新しいエンティティを作成する場合は、新しいレコードを挿入する通常の操作を行います。例:変更を追跡するフルコピーを論理的に作成することはできませんが、同じインスタンスを参照します。どのバージョンのオブジェクトを取るのですか?
メモリをコピーするだけでなく、深いクローンを永続化する – user440916
@ user440916:次に、データベースの別のエントリとしてメモリ内のコピーを保持するコードの2番目のビットを調べます。 –
私は間違っているかもしれませんが、明示的に照会したデータに制限するのではなく、DBからデータを取得し始めると考えています。あなたが好きかどうかに関わらず、オブジェクトグラフ全体が得られます。 –
@Merlyn:これはまさにこの問題を避けるためにレイジーなlodingをサポートしていないので、実際のSTEでは起こりません。 POCOでは、この作業を行うためにプロキシ作成をオフにする必要があります。 EntityObjectベースのエンティティは、シリアライズ可能として生成されるため、これをそのまま使用できます。 –
「本物」とはどういう意味ですか? 「現実の男性はその機能を使用していない」、あるいはそれは価値のない/有害な機能である可能性があります。または、他の何か?あなたはそれについての参考資料を提供できますか?あなたには挑戦しません、私は学ぶためにここにあります:) –