使用以下模型作为示例:
public class Item
{
public int ItemId { get; set; }
public int? ScanId { get; set; }
public Scan Scan { get; set; }
}
public class Scan
{
public int ScanId { get; set; }
}
假设我已将Scan
的实例与Item
的实例相关联。如果我取消关联Scan
记录,我想知道是否有办法配置EF,以便它会自动删除孤立的Scan
记录。我认为级联删除的概念不适用于这种情况,因为它只会删除Scan
记录,如果删除了Item
记录。
提前致谢。
答案 0 :(得分:0)
覆盖SaveChanges()
怎么样?您可以检查修改后的Item实体,检查最初ScanId是否为null,现在为null,获取原始ScanId的Scan实体,然后将其删除。像这样:
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();
}