そうです :
var t = cboTrailer.SelectedItem as Trailer;
using (var db = new CAPSContainer())
{
db.Attach(t);
db.Trailers.DeleteObject(t);
db.SaveChanges();
}
これにより、コンテキストからオブジェクトが削除さtrailer
れ、それらの変更がプッシュされます。しかし、それは失敗し、私は得ます:
「CAPSContainer.Trailers」のエンティティは、「CustomerTrailer」関係に参加します。関連する '顧客' が 0 件見つかりました。1 'Customer' が必要です。
問題は、Customers と Trailers の関係が ---> のようなものCustomer 1-* Trailer
であることです。したがって、トレーラーを削除しても問題にはなりません。
では、なぜエラーが発生するのでしょうか?
編集:
EF の v4 と 4.4 の両方の dll を試しました。Customer を最初にアタッチすればすべてうまくいくようですが、詳しく調べてみると、エラーは発生していませんが、トレーラーがまだ残っていることがわかります。
var c = cboCustomer.SelectedItem as Customer;
var t = cboTrailer.SelectedItem as Trailer;
using (var db = new CAPSContainer())
{
db.Attach(c);
c.Trailers.Remove(t);
db.SaveChanges();
}
PopulateTrailers();
--> リストにまだ表示されている + アプリを再起動してもまだそこにある...
編集2:
これはほとんど機能します:
using (var db = new CAPSContainer())
{
db.Attach(c);
db.Attach(t);
c.Trailers.Remove(t);
db.Trailers.DeleteObject(t);
db.SaveChanges();
}
それは(2回目の削除で)与えます:
同じキーを持つオブジェクトが ObjectStateManager に既に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。
私が単一のオブジェクトコンテキストを使用していた直前の同じプロジェクトで..
MyContext.DeleteObject(t)
それだけでした。同じ行が 5 行に置き換えられましたが、それでもエラーが発生します。