假设我有以下两个实体:
Item
int Id
ICollection<ChildItem> ChildItems
ChildItem
int Id
Item ParentItem
(在 EF 设计器和 SQL 服务器中,从 Item 到 ChildItem 的删除级联设置),我有一些这样的代码:
Item newItem = new Item();
ChildItem child1 = new ChildItem();
ChildItem child2 = new ChildItem();
newItem.ChildItems.Add(child1);
newItem.ChildItems.Add(child2);
myContext.Items.AddObject(newItem);
// Then much, much further down the line
myContext.Items.DeleteObject(newItem);
现在,EF 是否会自动发现它还必须删除子项,还是我应该自己删除它们?
问题是,如果我在 DeleteObject 之前添加 SaveChanges(),我的删除代码可以正常工作,但如果我尝试先删除,然后保存更改,我往往会得到一些“无法确定关联的主体端”-异常. 现在我正在尝试使用 EF 4 进行类似的操作。使用 EF5,我只会使用 context.Local -property,但现在我不太确定 EF 4 对添加了实体状态的对象做了什么。