1

假设我有以下两个实体:

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 对添加了实体状态的对象做了什么。

4

1 回答 1

1

也许改变 to 的状态newItemUnchanged可以了。

但我会采取不同的方法。显然,您正处于决定哪些新项目最终将提交到数据库的过程中。我将使用List<T>这些项目的简单本地,最初只在此列表中添加/删除项目。最后,当一切都整理好后,您将剩余的项目添加到myContext.Items并保存更改。它还将减少开销,因为更改跟踪器将不那么忙。

于 2013-04-03T11:27:07.787 回答