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

本文关键字:删除 保存 实体 EF | 更新日期: 2023-09-27 18:07:07

假设我有以下两个实体:

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,我只使用上下文。本地属性代替,但现在我不太确定EF 4对添加实体状态的对象做什么。

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

也许将newItem的状态更改为Unchanged将会奏效。

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