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