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);
}
}