2016-08-17 64 views
1

检查这些SO文章后:cascade-delete-in-entity-frameworkef6-1-soft-delete-with-cascade-deletecascading-soft-deletemethod-for-cascading-soft-deletes-in-parent-child-relationshipsreasons-for-cascading-soft-deletes,而不是寻找解决办法...如何级联SoftDelete?

我SoftDelete工作我的实体模型。我在我的上下文覆盖SaveChanges()

public override int SaveChanges() 
    { 
     ChangeTracker.DetectChanges(); 

     foreach (DbEntityEntry<ISoftDeletable> entity in ChangeTracker.Entries<ISoftDeletable>()) 
     { 
      if (entity.State == EntityState.Deleted) 
      { 
       entity.State = EntityState.Modified; 
       entity.Entity.IsDeleted = true; 
      } 
     } 
     return base.SaveChanges(); 
    } 

我已经设置CascadeOnDelete我的子实体。因为我覆盖已删除的EntityState它不会级联。有谁知道只有导航属性放在foreach循环中的方法吗?或者更好的方式来处理SoftDeletes?

谢谢你在前进,

+0

我看到[此链接](http://stackoverflow.com/a/13308176/261050)在这个SO页面的权利。 – Maarten

+0

@Maarten我看到了,但触发器无法检查记录是否继承了ISoftDeletable。 – Randy

+1

根据ISoftDeletable的存在,您可以在迁移代码中向数据库添加触发器。 – Maarten

回答

1

阅读这条SO后entity-framework-6-code-first-cascade-delete ...

我意识到,我被抓住并和删除我的实体是这样的:

var entity = context.Parent.FirstOrDefault(); 
context.Parent.Remove(entity); 

当我需要抓住整个图如下:

var entity = context.Parent.Include("Children").FirstOrDefault(); 
context.Parent.Remove(entity); 

谢谢为您的输入@Maarten