0
使用下面的模型爲例在EF刪除的實體。如果我取消關聯Scan
記錄,我想知道是否有方法配置EF,以便它會自動刪除孤立的Scan
記錄。我認爲級聯刪除的概念不適用於這種情況,因爲它只適用於刪除Scan
記錄,如果它的Item
記錄已被刪除。當它的FK被清除
在此先感謝。
使用下面的模型爲例在EF刪除的實體。如果我取消關聯Scan
記錄,我想知道是否有方法配置EF,以便它會自動刪除孤立的Scan
記錄。我認爲級聯刪除的概念不適用於這種情況,因爲它只適用於刪除Scan
記錄,如果它的Item
記錄已被刪除。當它的FK被清除
在此先感謝。
如何覆蓋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();
}
您可以在一個項目[ForeignKey的(「ScanID」)]關聯的,所以,當你刪除掃描,它將從項目中刪除太 –
你不能用所示的設計。 FK從源頭到目標(引用它的人)級聯,而不是相反。 –