diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index 5dd2b3a571..2e8557b27a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -14,20 +15,69 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling; public static class AbpEntityTypeBuilderExtensions { + public static List ConventionalConfigurers { get; } + + static AbpEntityTypeBuilderExtensions() + { + ConventionalConfigurers = new List + { + new NamedEntityConfigurer( + "ConcurrencyStamp", + b => b.TryConfigureConcurrencyStamp() + ), + new NamedEntityConfigurer( + "ExtraProperties", + b => b.TryConfigureExtraProperties() + ), + new NamedEntityConfigurer( + "ObjectExtensions", + b => b.TryConfigureObjectExtensions() + ), + new NamedEntityConfigurer( + "MayHaveCreator", + b => b.TryConfigureMayHaveCreator() + ), + new NamedEntityConfigurer( + "MustHaveCreator", + b => b.TryConfigureMustHaveCreator() + ), + new NamedEntityConfigurer( + "SoftDelete", + b => b.TryConfigureSoftDelete() + ), + new NamedEntityConfigurer( + "DeletionTime", + b => b.TryConfigureDeletionTime() + ), + new NamedEntityConfigurer( + "DeletionAudited", + b => b.TryConfigureDeletionAudited() + ), + new NamedEntityConfigurer( + "CreationTime", + b => b.TryConfigureCreationTime() + ), + new NamedEntityConfigurer( + "LastModificationTime", + b => b.TryConfigureLastModificationTime() + ), + new NamedEntityConfigurer( + "ModificationAudited", + b => b.TryConfigureModificationAudited() + ), + new NamedEntityConfigurer( + "MultiTenant", + b => b.TryConfigureMultiTenant() + ) + }; + } + public static void ConfigureByConvention(this EntityTypeBuilder b) { - b.TryConfigureConcurrencyStamp(); - b.TryConfigureExtraProperties(); - b.TryConfigureObjectExtensions(); - b.TryConfigureMayHaveCreator(); - b.TryConfigureMustHaveCreator(); - b.TryConfigureSoftDelete(); - b.TryConfigureDeletionTime(); - b.TryConfigureDeletionAudited(); - b.TryConfigureCreationTime(); - b.TryConfigureLastModificationTime(); - b.TryConfigureModificationAudited(); - b.TryConfigureMultiTenant(); + foreach (var configurer in ConventionalConfigurers) + { + configurer.ConfigureAction(b); + } } public static void ConfigureConcurrencyStamp(this EntityTypeBuilder b) @@ -308,6 +358,4 @@ public static class AbpEntityTypeBuilderExtensions b.As().TryConfigureExtraProperties(); b.As().TryConfigureConcurrencyStamp(); } - - //TODO: Add other interfaces (IAuditedObject...) -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/NamedEntityConfigurer.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/NamedEntityConfigurer.cs new file mode 100644 index 0000000000..055a54cf6a --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/NamedEntityConfigurer.cs @@ -0,0 +1,23 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Volo.Abp.EntityFrameworkCore.Modeling; + +public class NamedEntityConfigurer +{ + /// + /// Name of the configurer. + /// + public string Name { get; set; } + + /// + /// Action to configure the given . + /// + public Action ConfigureAction { get; } + + public NamedEntityConfigurer(string name, Action configureAction) + { + Name = Check.NotNullOrEmpty(name, nameof(name)); + ConfigureAction = Check.NotNull(configureAction, nameof(configureAction)); + } +} \ No newline at end of file