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()