31 lines
1.4 KiB
C#
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);
|
|
}
|
|
|
|
} |