2010-10-29 68 views
4

我使用POCO生成的类 - 任何方式,我可以tweek模板,以便当我从子集合中删除时,删除的项目也从D b ?删除()从集合不标记对象被删除 - EF4

或者也许在部分类中,我可以重写某些内容,捕获一个事件..?

基本上我想Order.OrderDetails.Remove(orderDetail)从数据库中删除orderDetail。

我做不是想要访问上下文并做context.OrderDetails.Delete(orderDetail)。

回答

1

当您从集合导航属性中删除对象时,实体框架将删除对象之间的关系(将引用其父对象的子对象的属性归零)。

如果要删除记录,则需要将对象标记为State = EntityState.Deleted。你可以通过访问上下文来实现,或者如果你不想,解决方法是识别ChangeTracker中孤儿的子对象,并在那里设置他们的状态为Deleted。

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; 
}