如何在EF核心中软删除一对多关系?

时间:2017-12-13 22:26:00

标签: entity-framework entity-framework-6 entity-framework-core

假设我有一个具有一对多关系的类别和产品实体,当我删除类别时,我想删除属于该类别的所有产品。并删除我的意思是将IsDeleted标志设置为true,因为我不想将其删除为真实(我可以通过在删除级联上指定)。我发现在删除类别时将IsDeleted设置为true的方法然而我无法弄清楚如何找到该类别的产品并为它们做同样的事情。有什么帮助吗?

    public override int SaveChanges()
    {
        ChangeTracker.DetectChanges();

        foreach(var item in ChangeTracker.Entries<Category>().Where(e => e.State == EntityState.Deleted))
        {      
            item.State = EntityState.Modified;
            item.CurrentValues["IsDeleted"] = true;
        }

        return base.SaveChanges();
    }

我还指定了查询过滤器,以便我不会删除项目

    builder.Entity<Category>().Property<bool>("IsDeleted");
    builder.HasQueryFilter(c => !EF.Property<bool>(c, "IsDeleted"));

1 个答案:

答案 0 :(得分:0)

只需使用级联删除。删除类别时,该类别的所有产品都将根据导航属性标记为已删除。这将由EFCore本身完成。我在我的代码中使用这个方法来软删除一对多的关系。然后使用(所以你的代码在产品上重复):

button