2017-03-15 43 views
0

使用下面的模型爲例在EF刪除的實體。如果我取消關聯Scan記錄,我想知道是否有方法配置EF,以便它會自動刪除孤立的Scan記錄。我認爲級聯刪除的概念不適用於這種情況,因爲它只適用於刪除Scan記錄,如果它的Item記錄已被刪除。當它的FK被清除

在此先感謝。

+0

您可以在一個項目[ForeignKey的(「ScanID」)]關聯的,所以,當你刪除掃描,它將從項目中刪除太 –

+0

你不能用所示的設計。 FK從源頭到目標(引用它的人)級聯,而不是相反。 –

回答

0

如何覆蓋SaveChanges()?您可以檢查修改後的項目實體,檢查最初ScanId是否爲空,現在它爲空,獲取原始ScanId的掃描實體,然後將其刪除。事情是這樣的:

public override int SaveChanges() 
{ 
    List<int> orphanedScanIds = new List<int>(); 
    foreach (var item in this.ChangeTracker.Entries().Where(e => e.Entity is Item && e.State == EntityState.Modified)) 
    { 
     var original = (int?)item.OriginalValues[nameof(Item.ScanId)]; 
     var current = (int?)item.CurrentValues[nameof(Item.ScanId)]; 
     if (original.HasValue && !current.HasValue) 
     { 
      orphanedScans.Add(original.Value); 
     } 
    } 
    var orphanedScans = this.Scans.Where(s => orphanedScans.Contains(s.ScanId)).ToList(); 
    foreach (var orphanedScan in orphanedScans) 
    { 
     this.Scans.Remove(orphanedScan); 
    } 
    return base.SaveChanges(); 
}