EF删除子对象

时间:2012-02-17 11:44:34

标签: asp.net-mvc entity-framework repository-pattern ddd-repositories aggregateroot

从父实体集合中删除子实体时,我注意到EF将子实体状态设置为要修改而不是删除。

实体对象管理器中是否有另一个属性将其设置为删除?

下面是我在EF存储库中的Save方法中使用的代码,用于查找已修改的所有子项,然后将其删除。

Dim orphans = DataContextFactory.GetWMSDBContext().ChangeTracker.Entries().Where(Function(e) (e.State = EntityState.Modified) AndAlso TypeOf e.Entity Is StockTransferItem)
For Each orphan In orphans
    orphan.State = EntityState.Deleted
Next

我遇到的问题是尝试检测更新和删除之间的区别,因为状态设置为两者都已修改。目前,我在更新记录时也会删除该项目。我可以在这两种状态之间进行检测吗?

1 个答案:

答案 0 :(得分:0)

EF说对象被修改而不是删除,因为从父集合中删除它正在修改它,而不是删除它。要删除它,请在包含要删除的对象的对象集上使用DeleteObject()方法,如:

myObjectContext.StockTransferItems.DeleteObject(stockTransferItemToDelete);