EF Core 7:如何找到从 ChangeTracker 派生的 EntityEntry 的顶级父级

问题描述 投票:0回答:0

使用 EF Core 7,我正在为顶级父(聚合根)实体实施审计日志解决方案。我有 ChangeTracker 提供给我的 EntityEntry 列表。

问题:有没有办法确定每个 EntityEntry 是否是顶级父实体?如果是child,那么判断哪个Entity是顶级parent?

var entries = ChangeTracker.Entries().Where(q => q.State == EntityState.Modified || q.State == EntityState.Deleted || q.State == EntityState.Added);

是否有内置函数可以返回顶级父级?

否则,我唯一的想法就是递归地使用导航来找到它。

// Recursive function to get the top-level parent entity
public object GetTopLevelParent(EntityEntry entry)
{
    // Check if the current entry is the top-level parent entity
    if (entry.Metadata.ToClrType == typeof(TopLevelParent))
    {
        return entry.Entity;
    }

    // Traverse the navigation properties to get the top-level parent entity
    foreach (var navigationEntry in entry.Navigations)
    {
        var navigationValue = navigationEntry.CurrentValue;

        if (navigationValue != null)
        {
            var navigationEntry = dbContext.Entry(navigationValue);
            var topLevelParent = GetTopLevelParent(navigationEntry);

            if (topLevelParent != null)
            {
                return topLevelParent;
            }
        }
    }

    // Top-level parent entity not found
    return null;
}

旁注:我做了广泛的研究,但没有运气,试图找到一种审计解决方案,该解决方案将在数据库中为顶级父级创建单个审计记录。审核记录将包含一个 JSON 数据字段,该字段应包含在父项和子项中所做的所有更改。这将以指数方式最小化在审计表中创建的行数。

entity-framework entity-framework-core
© www.soinside.com 2019 - 2024. All rights reserved.