从集合中删除()不会将对象标记为已删除 - EF4

时间:2010-10-29 10:34:48

标签: entity-framework-4 removechild

我正在使用POCO生成的类 - 我可以调整模板的任何方式,这样当我从子集合中删除时,删除的项目也会从数据库中删除?

或者也许在部分课程中我可以覆盖一些东西,抓住一个事件..?

基本上我想要Order.OrderDetails.Remove(orderDetail)从db中删除orderDetail。

想要访问上下文并执行context.OrderDetails.Delete(orderDetail)。

1 个答案:

答案 0 :(得分:1)

从集合导航属性中删除对象时,Entity Framework会删除对象之间的关系(使引用其父对象的子对象上的属性为空)。

如果要删除记录,则需要将对象标记为State = EntityState.Deleted。您可以通过访问上下文来执行此操作,或者如果您不想这样做,则解决方法是识别在ChangeTracker中已孤立的子对象,并将其状态设置为已删除。

var orphans = context.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified && typeof(e.Entity) is ChildType);
foreach (DbEntityEntry orphan in orphans)
{
    orphan.State = EntityState.Deleted;
}