如何使用 Entity Framework Core 进行级联软删除,包括导航属性?

Zin*_*nov 7 c# entity-framework-core

我可以获得所有标记为 IsDeleted = true 的实体,应用查询过滤器,其中 IsDeleted 是我的实体的一个字段。

现在,我的问题很简单,当我软删除具有我也想标记为 IsDeleted 的导航属性的实体时,如何使用 Entity Framework Core 进行级联软删除。

jan*_*ikb 5

我使用以下代码来完成级联删除。感谢@Zinov 和 ajcvickers。基于https://github.com/aspnet/EntityFrameworkCore/issues/11240

//..
case EntityState.Deleted:
    entry.State = EntityState.Modified;
    entry.CurrentValues["IsDeleted"] = true;
    foreach (var navigationEntry in entry.Navigations.Where(n => !n.Metadata.IsDependentToPrincipal()))
    {
        if (navigationEntry is CollectionEntry collectionEntry)
        {
            foreach (var dependentEntry in collectionEntry.CurrentValue)
            {
                HandleDependent(Entry(dependentEntry));
            }
        }
        else
        {
            var dependentEntry = navigationEntry.CurrentValue;
            if (dependentEntry != null)
            {
                HandleDependent(Entry(dependentEntry));
            }
        }
    }
    break;
}

private void HandleDependent(EntityEntry entry)
{
    entry.CurrentValues["IsDeleted"] = true;
}
Run Code Online (Sandbox Code Playgroud)