我愿意 :
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 1-* Trailer
...所以如果我删除预告片,它不应该是一个问题。
那么为什么会出错呢?
编辑:
我尝试了 EF 的 v4 和 4.4 dll。似乎如果我先附加客户,一切正常,但仔细检查表明,即使没有发生错误,拖车仍然存在。
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();
}
它给出(第二次删除):
ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
就在我之前在同一个项目中使用单个对象上下文时,这太疯狂了..
MyContext.DeleteObject(t)
就是这样。现在同一行替换为 5 行,但仍然存在错误。