From feb7ed4d6ca1984e328560271b292c76277eb0a1 Mon Sep 17 00:00:00 2001 From: honzapatCZ Date: Wed, 28 Oct 2026 20:24:50 +0100 Subject: [PATCH] add AutoInclude attribute --- Emails/wwwroot/output.css | 5 +++++ Models/AutoIncludeAttribute.cs | 31 +++++++++++++++++++++++++++++++ Models/CommonDbContext.cs | 8 ++++++++ 3 files changed, 44 insertions(+) create mode 100644 Models/AutoIncludeAttribute.cs diff --git a/Emails/wwwroot/output.css b/Emails/wwwroot/output.css index b76d0d7..fd62f3a 100644 --- a/Emails/wwwroot/output.css +++ b/Emails/wwwroot/output.css @@ -1193,6 +1193,11 @@ video { text-decoration-line: line-through; } +.invert { + --tw-invert: invert(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } diff --git a/Models/AutoIncludeAttribute.cs b/Models/AutoIncludeAttribute.cs new file mode 100644 index 0000000..87ce16d --- /dev/null +++ b/Models/AutoIncludeAttribute.cs @@ -0,0 +1,31 @@ +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); + } + +} \ No newline at end of file diff --git a/Models/CommonDbContext.cs b/Models/CommonDbContext.cs index 7f82e39..9495cbd 100644 --- a/Models/CommonDbContext.cs +++ b/Models/CommonDbContext.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure; using Microsoft.EntityFrameworkCore.Proxies.Internal; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Storage; @@ -26,6 +27,13 @@ public abstract class CommonDbContext : DbContext { } + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + base.ConfigureConventions(configurationBuilder); + + configurationBuilder.Conventions.Add(serviceProvider => new AutoIncludeAttributeConvention(serviceProvider.GetRequiredService())); + } + public abstract CommonDbContext CreateCopy(); public async Task ApiSaveChangesAsync()