繁体   English   中英

在Entity Framework Core的同一表上删除父级时,级联删除子行

[英]Cascade delete child rows when parent is deleted on same table in Entity Framework Core

以下是关于数据上下文的实体。 我要在删除父区域时删除子区域。

我试过了

  1. 级联删除。 这不能幸免于迁移。

  2. 递归列出在删除区域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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM