From c1d49e47b3d57110cc7b46b3ba62c57f0c5059a2 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 7 Mar 2024 14:16:25 +0300 Subject: [PATCH] Allow extending ConfigureConventions and OnModelCreating --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 19 ++++-- .../AbpDbContextOptions.cs | 66 +++++++++---------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index edb4e77064..b0674b0be0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -118,10 +118,14 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, } var abpDbContextOptions = LazyServiceProvider.LazyGetRequiredService>().Value; + + var actions = abpDbContextOptions.ModelBuilderActions + .Where(x => x.Key == typeof(TDbContext) || x.Key == typeof(AbpDbContext<>)) + .SelectMany(x => x.Value) + .OrderBy(a => a.Key) + .Select(a => a.Value) + .ToList(); - var modelBuilderActions = abpDbContextOptions.ModelBuilderActions.Where(x => x.Key == typeof(TDbContext) || x.Key == typeof(AbpDbContext<>)).SelectMany(x => x.Value).ToList(); - - var actions = modelBuilderActions.OrderBy(a => a.Key).Select(a => a.Value).ToList(); foreach (var action in actions) { if(action is Action modelBuilderAction) @@ -142,9 +146,12 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, var abpDbContextOptions = LazyServiceProvider.LazyGetRequiredService>().Value; - var conventions = abpDbContextOptions.Conventions.Where(x => x.Key == typeof(TDbContext) || x.Key == typeof(AbpDbContext<>)).SelectMany(x => x.Value).ToList(); - - var actions = conventions.OrderBy(a => a.Key).Select(a => a.Value).ToList(); + var actions = abpDbContextOptions.Conventions + .Where(x => x.Key == typeof(TDbContext) || x.Key == typeof(AbpDbContext<>)) + .SelectMany(x => x.Value) + .OrderBy(a => a.Key) + .Select(a => a.Value) + .ToList(); foreach (var action in actions) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs index 93de6a473c..f40974cdce 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs @@ -51,56 +51,24 @@ public class AbpDbContextOptions public void ConfigureConventions([NotNull] Action action, Type? dbContextType = null, int? order = null) { - Check.NotNull(action, nameof(action)); - - var actions = Conventions.GetOrDefault(dbContextType ?? typeof(AbpDbContext<>)); - if (actions == null) - { - Conventions[dbContextType ?? typeof(AbpDbContext<>)] = actions = new List>(); - } - - actions.Add(new KeyValuePair(order, action)); + InternalConfigureConventions(action, dbContextType, order); } public void ConfigureConventions([NotNull] Action action, int? order = null) where TDbContext : AbpDbContext { - Check.NotNull(action, nameof(action)); - - var actions = Conventions.GetOrDefault(typeof(TDbContext)); - if (actions == null) - { - Conventions[typeof(TDbContext)] = actions = new List>(); - } - - actions.Add(new KeyValuePair(order, action)); + InternalConfigureConventions(action, typeof(TDbContext), order); } public void OnModelCreating([NotNull] Action action, Type? dbContextType = null, int? order = null) { - Check.NotNull(action, nameof(action)); - - var actions = ModelBuilderActions.GetOrDefault(dbContextType ?? typeof(AbpDbContext<>)); - if (actions == null) - { - ModelBuilderActions[dbContextType ?? typeof(AbpDbContext<>)] = actions = new List>(); - } - - actions.Add(new KeyValuePair(order, action)); + InternalOnModelCreating(action, dbContextType, order); } public void OnModelCreating([NotNull] Action action, int? order = null) where TDbContext : AbpDbContext { - Check.NotNull(action, nameof(action)); - - var actions = ModelBuilderActions.GetOrDefault(typeof(TDbContext)); - if (actions == null) - { - ModelBuilderActions[typeof(TDbContext)] = actions = new List>(); - } - - actions.Add(new KeyValuePair(order, action)); + InternalOnModelCreating(action, typeof(TDbContext), order); } public bool IsConfiguredDefault() @@ -163,4 +131,30 @@ public class AbpDbContextOptions } } } + + private void InternalConfigureConventions(object action, Type? dbContextType = null, int? order = null) + { + Check.NotNull(action, nameof(action)); + + var actions = Conventions.GetOrDefault(dbContextType ?? typeof(AbpDbContext<>)); + if (actions == null) + { + Conventions[dbContextType ?? typeof(AbpDbContext<>)] = actions = new List>(); + } + + actions.Add(new KeyValuePair(order, action)); + } + + private void InternalOnModelCreating(object action, Type? dbContextType = null, int? order = null) + { + Check.NotNull(action, nameof(action)); + + var actions = ModelBuilderActions.GetOrDefault(dbContextType ?? typeof(AbpDbContext<>)); + if (actions == null) + { + ModelBuilderActions[dbContextType ?? typeof(AbpDbContext<>)] = actions = new List>(); + } + + actions.Add(new KeyValuePair(order, action)); + } } \ No newline at end of file