2011-01-18 13 views
1

私は今オブジェクトを取得し、深いクローンを作成し、すべてのidsを0(親と子)にして元に戻して、オブジェクトとそのすべての子を複製する必要があります。 DBは元のオブジェクトがDB内で変更されます。簡単にする方法はありますか?nhibernateで重複を挿入する

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

EDIT

私は、オブジェクトのディープコピーを取得するために、シリアライズを使用していますが、奇妙なことはこれです。私はオブジェクトをシリアル化してファイルに保存した後、オブジェクトを逆シリアル化してidsを0にしてから、親と子のいくつかの値に対して元の値を変更するための操作をいくつか行います。問題は私がセッションをフラッシュするときです。

ORIGINAL:

MODIFIED
Parent 
    IdParent = 1 
    Name = "Parent" 
Child 1 
    IdChild = 1 
    IdParent = 1 
    Name = "Child 1" 

Parent = 0 
    Name = "Parent" 
Child 1 
    IdChild = 0 
    IdParent = null 
    Name = "Child 1 modified" 

親は私が細かい値何もかも年代を保存するタイプのIListのコレクションを持っていますが、フラッシュが呼び出されたときに、例えば、私はこれを持っていますこの追加の文が実行されます。

UPDATE子SET IdParent = null WHERE IdParent = 1

そして、DB内の元のデータは、この

子テーブルのように変更されます。

IdChild  | IdParent | Name 
-------------------------------------- 
1   | Null  | "Child 1" 
2   | 2   | "Child 1 modified" 

任意のアイデア?

ありがとうございました。 アリエル

EDIT 2

私が使用している方法

SERIALIZE:

デシリアライズ
Stream archivo = File.Create(rutaArchivo); 
BinaryFormatter serializador = new BinaryFormatter(); 
serializador.Serialize(archivo, objetoASerializar); 
archivo.Close(); 

:元のオブジェクトを取得する場合

Stream archivo = File.OpenRead(rutaArchivo); 
BinaryFormatter serializador = new BinaryFormatter(); 
T objetoDeserializado = (T)serializador.Deserialize(archivo); 
archivo.Close(); 
+0

はあなたが私達にあなたのシリアライズ/デシリアライズコードを表示することができます:

  • はそれをDB SQLのスタイルですか? – Vadim

  • 答えて

    0

    うーん、私は思います変更d、あなたは "深いコピー"はあまり深くない、私は元のオブジェクトからコレクションをコピーすると思います。あり2一般的な方法の私はあなたがこれを行うことができると思う:

    • 、あなたはそれが本当に深いコピーのクローン作成するコードクローンを作成、変更、これは別の方法で行うことができ.NETオブジェクトのコピーを作成し、あなたがオブジェクトをシリアル化し、それをデシリアライズクローンを作成し、AutoMapperを使用してクローンを作成しようとすると(コピーを作成するオブジェクトをマップできるかどうかはわかりませんが)、可能であればコレクションを適切な方法でコピーします。 (テーブルからSELECT *どこID = @ IDの)INSERT INTO表
    関連する問題