2011-12-19 8 views
0

私のプロジェクトでは、次のコードを使用して既存のレコードを新しいレコードとしてコピーしています。既存のエンティティオブジェクトをDbContextに追加するとどうなりますか?

// Copying existing purchase order 
    Purchase newPurchase = this.currentPurchase 
    // Add copy to DbContext 
    this.boManager.Add(newPurchase); 
    // Saveing changes and handle exceptions 
    CommitChanges(); 

それは働いているようだが、私は何が起こるかは、それは私が既存のレコードを追加していたとき、私は実際には午前不可欠同じデータを持つ新しいものを追加したいとエンティティフレーム上の図を頼ることになると思われることを観察し、私のためにそれを行いますが、私は誤って既存のレコードを追加することを追加していることが分かりました。レコードが既に存在するので何もしないほうがいいです。

だから、私の質問は:

  1. エンティティの内部作業についての私の解釈が正しいですか?
  2. 新しい機能をコピーするには、そのコードに依存する必要がありますか?

答えて

0

購入newPurchase = this.currentPurchase

これだけcurrentPurchaseオブジェクトへの参照をコピーするのではなく、新しいオブジェクトを作成します。 clone()を使用するかPurchaseオブジェクトを作成するだけで、currentPurchaseのすべてのフィールドを新しいobjにマップし、新しいobjをコンテキストに追加することができます。

+0

ありがとうSza、今、愚かな感じ:D。あなたが提案したソリューションについては、そこにジェネリッククローンエクステンションメソッドについて話していると思います:http://stackoverflow.com/questions/2178080/linq-to-sql-copy-original-entity-to-new-one-and-セーブ?そして、地図は反射する権利を意味しますか?私はGeneric Cloneメソッドを使用していますが、自動EFプロキシとの闘いのために遅延ロードをオフにしなければなりませんでした。 –

関連する問題