私はあなたが私を助けてくれることを願っています。私はこのバグがどこに残っているかを把握しようと、一晩中頭を悩ましています。Entity.SaveChanges()は、BindingListの削除されたオブジェクトも保存しますか?
私はwinformで請求書作成アプリケーションを作成しています。
データソースがBindingListオブジェクトに設定されたフォーム上にグリッドがあります。
BindingList<InvoiceLine> MyInvoiceLines = new BindingList<InvoiceLine> { };
Invoice MyInvoice = new Invoice();
InvoiceLineと請求書の両方が私のモデルでは、エンティティオブジェクトです:
はちょうどそれはの線に沿ってみましょう。
私は経由してグリッドに行を追加します。
LineToBeRemovedは使用を削除したいときに選択した行を取得するプロパティですMyInvoiceLines.Remove(LineToBeRemoved);
:私は経由グリッドから行を削除
MyInvoiceLines.Add(new InvoiceLine());
ラインなど...
結局私は請求書を保存するので、私はこれを行います。
foreach(var line in MyInvoiceLines)
{
MyInvoice.InvoiceLines.Add(line);
}
を呼び出し、SaveChange()を呼び出します。しかし、InvoiceLines BindingListから削除された行も保存されています...私は頭を傷つけています。私のコードでは、最初から最後まで、InvoiceLinesコレクションは参照されるか、データコンテキストこのメソッドの前にオブジェクトがあり、最終的には保存を行います。
これは私のコードを簡略化したものですが、BindingListまたはデータコンテキストオブジェクトのどちらかで概念的に間違っているものがあると考えるのは難しいです。私がノブなので、本当に私には明らかではありません。
すべてのヘルプではなく、修正後、私はさらに、この問題を診断することができますおそらくいくつかのツールや方法をいただければ幸いです...
アップデート:するBindingListに追加する前に、アイテムを取り外し、一見固定はなく、エンティティからオブジェクトを削除すると、奇妙な動作が発生します。
コードを投稿し、エラーの発生場所と条件を教えてください。 –
申し訳ありませんが、私はあまりにも早く提出しました。私はOPを更新しました。詳細が必要な場合はお知らせください。 – Rillanon
'MyInvoiceLines.Remove(LineToBeRemoved)'が実際に動作し、foreachループの 'MyInvoiceLines'に実際に削除されたアイテムが含まれていないことを確認しましたか? – Slauma