私のPOCOの変更をデータベースに保存するのに問題があります。POCOの変更を保存する
私はPOCOオブジェクトに必要なすべてのオブジェクトを取得し、「保存」ボタンをクリックすると新しいObjectContextインスタンスを作成し、オブジェクトをループしてコンテキストにアタッチする必要があります変更を検出して保存します。
public void SaveData() {
using (SolEntities sec = new SolEntities(_cxnStr)) {
foreach (ExtViews.Planet p in Planets) {
sec.CelestialBodies.Attach(p.TheBody);
sec.CelestialBodies.ApplyCurrentValues(p.TheBody);
}
sec.SaveChanges(SaveOptions.AcceptAllChangesAfterSave | SaveOptions.DetectChangesBeforeSave);
}
}
しかし、これは動作するようには思えない、私は仕事にそれを得ることができる2つの方法のどちらかにした: A)は、から生成することを強制する(foreach
ループの前に惑星のローカルリストを作成します。変更された値を適用する前にDbと仮定して)、Attach
サテライトを削除します。
sec.ObjectStateManager.ChangeObjectState(p.TheBody, System.Data.EntityState.Modified);
しかし、手動ですべてのオブジェクトのために変更にObjectStateを強制することは、それらが変更されていませんでした場合は特に、私は内部の何かを保つことができ、ビットやり過ぎのようだ: または B)は、このいずれかのApplyCurrentValues
ラインスイッチそれが変更されているかどうかは問わず、私はApplyCurrentValuesが最初にそうするだろうと考えましたか?
ここで私の答えを確認してください:http://stackoverflow.com/questions/3635071/update-relationships-when-saving-changes-of-ef4-poco-objects/3635326#3635326各オブジェクト - 切断されたオブジェクトを使用する場合は、手動で同期を行う必要があります。 –