0

此代码有效:

var c = cboCustomer.SelectedItem as Customer;
var t = cboTrailer.SelectedItem as Trailer;
using (var db = new CAPSContainer())
{
   db.Attach(c);
   db.Attach(t); 
   c.Trailers.Remove(t);
   db.DeleteObject(t);
   db.SaveChanges();
}

但我不明白为什么我不能这样做:

db.Attach(t);
db.DeleteObject(t);
db.SaveChanges();

如果我尝试,我会得到:

“CAPSContainer.Trailers”中的实体参与“CustomerTrailer”关系。找到 0 个相关的“客户”。1“客户”是预期的。

我首先使用的是 EF 5.0 模型,这里是 edmx 图表的一部分:

在此处输入图像描述

我发现很难理解为什么,请帮忙。

更新 1(如 Boomer 所建议的):

            using (var db = new CAPSContainer())
            {
                db.Attach(c);
                //db.Attach(t);
                //c.Trailers.Remove(t);
                db.DeleteObject(t);
                db.SaveChanges();
            }

返回:

无法删除该对象,因为它在 ObjectStateManager 中找不到。

4

1 回答 1

1

错误很明显,因为在这种关系中需要客户。就像您在数据库中插入 Trailer 记录而不指定 CustomerID,您可以在 SQL 中执行此操作吗?

例如,更好的方法是通过 ID 删除该对象。在这种情况下,您不必t在删除之前附加:

using (var db = new CAPSContainer())
{   
    db.DeleteObject(db.Trailers.Where(p => p.ID == t.ID));
    db.SaveChanges();
}

或者在加载所有Trailers(在下拉列表中)时,您还应该获得Customer它以及附加的任何其他强制性实体。

于 2012-12-07T10:30:00.183 回答