NejCommon.NET/Models/AutoIncludeAttribute.cs
2026-10-28 20:24:50 +01:00

31 lines
1.4 KiB
C#

using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Conventions;
using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure;
namespace NejCommon.Models;
/// <summary>
/// Apply EF AutoInclude() to the attributed navigation property
/// </summary>
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class AutoIncludeAttribute : Attribute { }
/// <summary>
/// EF convention that enables AutoInclude for all navigation properties that have the <see cref="AutoIncludeAttribute"/>
/// </summary>
internal class AutoIncludeAttributeConvention : NavigationAttributeConventionBase<AutoIncludeAttribute>, INavigationAddedConvention, ISkipNavigationAddedConvention {
/// <inheritdoc/>
public AutoIncludeAttributeConvention(ProviderConventionSetBuilderDependencies dependencies) : base(dependencies) { }
/// <inheritdoc/>
public override void ProcessNavigationAdded(IConventionNavigationBuilder navigationBuilder, AutoIncludeAttribute attribute, IConventionContext<IConventionNavigationBuilder> context) {
navigationBuilder.AutoInclude(true, true);
}
/// <inheritdoc/>
public override void ProcessSkipNavigationAdded(IConventionSkipNavigationBuilder skipNavigationBuilder, AutoIncludeAttribute attribute, IConventionContext<IConventionSkipNavigationBuilder> context) {
skipNavigationBuilder.AutoInclude(true, true);
}
}