EF4-セッション間でキャプチャされない変更
-
22-09-2019 - |
質問
エンティティを1つのコンテキストから切り離し、それを変更し、新しいコンテキストを作成し、それを添付し、セッション間に変更された変更を持続させるテストを試みています。私はこれを適切に機能させることができないようです。私はDetectChangesを呼び出し、CORRENTVALUESを呼び出してみました。以下は私がこれまでに持っているものです。これらはポコではなく、私はそれらをそのように扱いたくありません。エンティティを切り離し、それを変更し、再び渡すことができるようにしたいだけです。ありがとう!
OCConsumer consumer; using (var ctx1 = new CMSStagingContext()) { consumer = (from c in ctx1.OCConsumers select c).FirstOrDefault(); Console.WriteLine("Retrieved {0} - {1} {2}", consumer.CustomerId, consumer.FirstName, consumer.LastName); ctx1.Detach(consumer); } consumer.BirthDate = "10/22/1981"; using (var ctx2 = new CMSStagingContext()) { ctx2.Attach(consumer); ctx2.ApplyCurrentValues("OCConsumers", consumer); ctx2.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave | System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave); }
解決
あなたの例を見ることから、マッピングプラグインはそれを期待するとおりに動作しています。コレクションのfromJS
を呼び出すと、マッピングプラグインを効果的に言うと、これはそのコレクションの新しい内容です。例えば:
2行目、あなたが更新していたか、単にIDを削除したかどうかを知ることができます:2?
私は、データを単に更新として扱う適切な方法についての言及は見つかりませんが、1つを追加できます。マッピングされたアレイには、特定の項目が見つかるのを助けるためにmappedIndexOf
などの役立つメソッドがいくつかあります。更新データ・セットを表示するだけでは、単にループをループするだけで、その特定の項目へのマッピング.fromjs呼び出しでアイテムを見つけてアップデートしてください。これは簡単に再利用可能な方法に一般化することができます。
所属していません StackOverflow