C# 如何级联SoftDelete?

C# 如何级联SoftDelete?,c#,entity-framework-6,soft-delete,C#,Entity Framework 6,Soft Delete,在检查了这些SO文章之后:、和没有找到解决方案 我的实体模型使用SoftDelete。我已在我的上下文中重写了SaveChanges(): public override int SaveChanges() { ChangeTracker.DetectChanges(); foreach (DbEntityEntry<ISoftDeletable> entity in ChangeTracker.Entries<ISoftDel

在检查了这些SO文章之后:、和没有找到解决方案

我的实体模型使用SoftDelete。我已在我的上下文中重写了
SaveChanges()

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

        foreach (DbEntityEntry<ISoftDeletable> entity in ChangeTracker.Entries<ISoftDeletable>())
        {
            if (entity.State == EntityState.Deleted)
            {
                entity.State = EntityState.Modified;
                entity.Entity.IsDeleted = true;
            }
        }
        return base.SaveChanges();
    }
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
foreach(ChangeTracker.Entries()中的DbEntityEntry实体)
{
if(entity.State==EntityState.Deleted)
{
entity.State=EntityState.Modified;
entity.entity.IsDeleted=true;
}
}
返回base.SaveChanges();
}
我已为我的子实体设置CascadeOnDelete。因为我覆盖了已删除的
EntityState
,所以它不会层叠。有人知道一种只将导航属性放入
foreach
循环的方法吗?还是处理软删除的更好方法


提前感谢您,

阅读本文后

我意识到,我像这样抓取和删除我的实体:

var entity = context.Parent.FirstOrDefault();
context.Parent.Remove(entity);
var entity = context.Parent.Include("Children").FirstOrDefault();
context.Parent.Remove(entity);
当我需要像这样抓取整个图形时:

var entity = context.Parent.FirstOrDefault();
context.Parent.Remove(entity);
var entity = context.Parent.Include("Children").FirstOrDefault();
context.Parent.Remove(entity);

感谢您的输入@Maarten

我在本SO页面的右侧看到了。@Maarten我看到了,但触发器无法检查记录是否继承了ISoftDeletable。您可以根据ISoftDeletable的存在,在迁移代码中向数据库添加触发器。