EF Core 在配置中标记一个 属性 并检查 属性 是否包含 UoW 中的标记

EF Core Mark a property in configuration and check if that property contains the mark in UoW

EF Core 是否支持此功能?

我需要在配置中标记属性并使用更改跟踪器检查 属性 是否包含 UoW 中的指定标记。

例如这样的事情:

builder.Property(x => x.Id)
            .DisableAudit();

并在 UoW 中使用它:

        var auditables = _context
            .ChangeTracker
            .Entries<IAuditable>()
            .ToList();

        foreach (var entity in auditables)
        {
            foreach (var property in entity.Properties)
            {
                if (AuditIsDisabled(property))
                {
                    // ...
                }

可以通过注解实现:

public static class AuditExtensions
{
    public const string CustomDisableAudit = "custom:disable_audit";

    public static PropertyBuilder<TProperty> DisableAudit<TProperty>(this PropertyBuilder<TProperty> property)
    {
        return property.HasAnnotation(CustomDisableAudit, true);
    }

    public static bool IsAuditDisabled(this PropertyEntry propertyEntry)
    {
        return propertyEntry.Metadata.IsAuditDisabled();
    }

    public static bool IsAuditDisabled(this IProperty property)
    {
        return property.FindAnnotation(CustomDisableAudit)?.Value as bool? == true;
    }
}