[英]Cascade delete child rows when parent is deleted on same table in Entity Framework Core
以下是关于数据上下文的实体。 我要在删除父区域时删除子区域。
我试过了
级联删除。 这不能幸免于迁移。
递归列出在删除区域z时应删除的所有区域,并使用RemoveRange删除列表中的所有项目。 它仍然引发异常说
错误:
DELETE语句与SAME TABLE REFERENCE约束冲突
如何删除具有这种简单关系的项目?
public class Zone
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual Zone ParentZone { get; set; }
}
public class ZoneDbContext : DbContext
{
public ZoneDbContext(DbContextOptions<ZoneDbContext> options) : base(options)
{
}
public DbSet<Zone> Zones { get; set; }
}
这种方法有效
public void DeleteMyEntity(MyEntity entity)
{
var target = MyEntities
.Include(x => x.Children)
.FirstOrDefault(x => x.Id == entity.Id);
RecursiveDelete(target);
SaveChanges();
}
private void RecursiveDelete(MyEntity parent)
{
if (parent.Children != null)
{
var children = MyEntities
.Include(x => x.Children)
.Where(x => x.ParentId == parent.Id);
foreach (var child in children)
{
RecursiveDelete(child);
}
}
MyEntities.Remove(parent);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.