EF 4在保存实体之前删除相关项目

时间:2013-04-03 08:50:49

标签: c# entity-framework

假设我有以下两个实体:

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

1 个答案:

答案 0 :(得分:1)

newItem状态更改为Unchanged可能会解决问题。

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