假设我有以下两个实体:
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对实体状态添加的对象做了什么。
答案 0 :(得分:1)
将newItem
状态更改为Unchanged
可能会解决问题。
但我会采取不同的方法。显然,您正处于决定哪些新项目最终将提交到数据库的过程中。我会使用这些项目的简单本地List<T>
,并且最初只在此列表中添加/删除项目。最后,当所有内容都已整理好后,您可以将剩余的项目添加到myContext.Items
并保存更改。它还可以减少开销,因为更改跟踪器将不那么繁忙。