![](/img/trans.png)
[英]How to delete a zero or one foreign key relation in EF Code First? FK to be deleted in tables when optional entity deleted
[英]Delete an entity in EF when its FK is cleared
使用以下模型作为示例:
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
记录。 我相信级联删除的概念不适用于这种情况,因为它仅适用于在删除Item
记录的情况下删除Scan
记录的情况。
提前致谢。
覆盖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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.