2016-08-17 62 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