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