diff --git a/src/Shentun.Peis.EntityFrameworkCore/DbMapping/Asbitems/AsbitemDbMapping.cs b/src/Shentun.Peis.EntityFrameworkCore/DbMapping/Asbitems/AsbitemDbMapping.cs new file mode 100644 index 0000000..02f693a --- /dev/null +++ b/src/Shentun.Peis.EntityFrameworkCore/DbMapping/Asbitems/AsbitemDbMapping.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Shentun.Peis.Books; +using Shentun.Peis.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.EntityFrameworkCore.Modeling; + +namespace Shentun.Peis.EntityFrameworkCore +{ + internal class AsbitemDbMapping : IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder entity) + { + entity.HasComment("组合项目"); + entity.Property(t => t.DisplayName).HasComment("名称"); + entity.Property(t => t.ShortName).HasComment("简称"); + entity.Property(t => t.ForSexId).HasComment("适用性别,M-男,F-女,A-全部"); + entity.Property(t => t.ItemTypeId).HasComment("项目类别"); + entity.Property(t => t.Price).HasComment("价格"); + entity.Property(t => t.DeviceTypeId).HasComment("仪器类别"); + entity.Property(t => t.InvoiceItemTypeId).HasComment("发票类别"); + entity.Property(t => t.IsItemResultMerger).HasComment("项目结果合并"); + entity.Property(t => t.IsBeforeEat).HasComment("餐前项目"); + entity.Property(t => t.ClinicalMeaning).HasComment("临床意义"); + entity.Property(t => t.DefaultResult).HasComment("默认结果"); + entity.Property(t => t.QueueTime).HasComment("候诊时间"); + entity.Property(t => t.IsDiagnosisFunction).HasComment("启用诊断函数"); + entity.Property(t => t.DiagnosisFunction).HasComment("诊断函数"); + entity.Property(t => t.IsContinueProcess).HasComment("诊断函数处理完毕后继续处理"); + entity.Property(t => t.IsPictureRotate).HasComment("体检报告图片旋转90°"); + entity.Property(t => t.IsCheck).HasComment("是检查项目"); + entity.Property(t => t.IsActive).HasComment("是启用"); + + + entity.Property(e => e.Id) + .IsFixedLength() + .HasComment("编号").HasColumnName("id"); + + + + entity.Property(e => e.DeviceTypeId).IsFixedLength(); + + entity.Property(e => e.ForSexId).HasDefaultValueSql("'A'::bpchar"); + + entity.Property(e => e.InvoiceItemTypeId).IsFixedLength(); + + entity.Property(e => e.ItemTypeId).IsFixedLength(); + + entity.HasOne(d => d.InvoiceItemType) + .WithMany(p => p.Asbitems) + .HasForeignKey(d => d.InvoiceItemTypeId) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("fk_asbitem_invoice_item_type"); + + entity.HasOne(d => d.ItemType) + .WithMany(p => p.Asbitems) + .HasForeignKey(d => d.ItemTypeId) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("fk_asbitem_item_type"); + + entity.ConfigureByConvention(); + } + } +} diff --git a/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs b/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs index c3b1055..02f2796 100644 --- a/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs +++ b/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs @@ -1,9 +1,6 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; using Shentun.Peis.Books; -using Shentun.Peis.DbMapping; using Shentun.Peis.Models; -using Shentun.Peis.OrganizationUnits; using System; using System.Collections.Generic; using Volo.Abp.AuditLogging.EntityFrameworkCore; @@ -11,7 +8,6 @@ using Volo.Abp.BackgroundJobs.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity; using Volo.Abp.Identity.EntityFrameworkCore; @@ -24,7 +20,6 @@ using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.EntityFrameworkCore; -using Volo.Abp.Users; namespace Shentun.Peis.EntityFrameworkCore; @@ -81,6 +76,8 @@ public class PeisDbContext : public DbSet TestCTs { get; set; } + + #endregion @@ -363,59 +360,7 @@ public class PeisDbContext : #region new整理 - builder.Entity(entity => - { - entity.HasComment("组合项目"); - entity.Property(t => t.DisplayName).HasComment("名称"); - entity.Property(t => t.ShortName).HasComment("简称"); - entity.Property(t => t.ForSexId).HasComment("适用性别,M-男,F-女,A-全部"); - entity.Property(t => t.ItemTypeId).HasComment("项目类别"); - entity.Property(t => t.Price).HasComment("价格"); - entity.Property(t => t.DeviceTypeId).HasComment("仪器类别"); - entity.Property(t => t.InvoiceItemTypeId).HasComment("发票类别"); - entity.Property(t => t.IsItemResultMerger).HasComment("项目结果合并"); - entity.Property(t => t.IsBeforeEat).HasComment("餐前项目"); - entity.Property(t => t.ClinicalMeaning).HasComment("临床意义"); - entity.Property(t => t.DefaultResult).HasComment("默认结果"); - entity.Property(t => t.QueueTime).HasComment("候诊时间"); - entity.Property(t => t.IsDiagnosisFunction).HasComment("启用诊断函数"); - entity.Property(t => t.DiagnosisFunction).HasComment("诊断函数"); - entity.Property(t => t.IsContinueProcess).HasComment("诊断函数处理完毕后继续处理"); - entity.Property(t => t.IsPictureRotate).HasComment("体检报告图片旋转90°"); - entity.Property(t => t.IsCheck).HasComment("是检查项目"); - entity.Property(t => t.IsActive).HasComment("是启用"); - - - - entity.Property(e => e.Id) - .IsFixedLength() - .HasComment("编号"); - - - entity.Property(e => e.CreationTime).HasDefaultValueSql("(date(timezone('UTC-8'::text, now())) - 1)"); - - entity.Property(e => e.DeviceTypeId).IsFixedLength(); - - entity.Property(e => e.ForSexId).HasDefaultValueSql("'A'::bpchar"); - - entity.Property(e => e.InvoiceItemTypeId).IsFixedLength(); - - entity.Property(e => e.ItemTypeId).IsFixedLength(); - - entity.HasOne(d => d.InvoiceItemType) - .WithMany(p => p.Asbitems) - .HasForeignKey(d => d.InvoiceItemTypeId) - .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("fk_asbitem_invoice_item_type"); - - entity.HasOne(d => d.ItemType) - .WithMany(p => p.Asbitems) - .HasForeignKey(d => d.ItemTypeId) - .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("fk_asbitem_item_type"); - - entity.ConfigureByConvention(); - }); + builder.ApplyConfiguration(new AsbitemDbMapping()); builder.Entity(entity => { @@ -442,6 +387,7 @@ public class PeisDbContext : .HasForeignKey(d => d.ItemId) .HasConstraintName("fk_asbitem_detail_item"); + entity.ConfigureByConvention(); }); @@ -460,7 +406,7 @@ public class PeisDbContext : entity.Property(e => e.AsbitemId).IsFixedLength(); - + //entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -827,6 +773,8 @@ public class PeisDbContext : .HasForeignKey(d => d.PayModeId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_charge_back_pay_pay_mode"); + + entity.ConfigureByConvention(); }); @@ -858,6 +806,8 @@ public class PeisDbContext : .HasForeignKey(d => d.PayModeId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_charge_"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -940,7 +890,7 @@ public class PeisDbContext : .HasForeignKey(d => d.ContactPersonId) .HasConstraintName("fk_contact_method_contact"); - + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -1140,6 +1090,8 @@ public class PeisDbContext : .HasForeignKey(d => d.PayModeId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_org_charge_back_pay_pay_mode"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -1243,6 +1195,8 @@ public class PeisDbContext : .WithMany(p => p.CustomerOrgGroupDetails) .HasForeignKey(d => d.CustomerOrgGroupId) .HasConstraintName("fk_org_group_detail_org_group"); + + entity.ConfigureByConvention(); }); @@ -1472,6 +1426,8 @@ public class PeisDbContext : .WithMany(p => p.DiagnosisTemplateDetails) .HasForeignKey(d => d.DiagnosisTemplateId) .HasConstraintName("fk_diagno2"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -1633,6 +1589,8 @@ public class PeisDbContext : entity.Property(e => e.Result).HasComment("结果"); entity.Property(e => e.Unit).HasComment("单位"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -1651,6 +1609,8 @@ public class PeisDbContext : entity.Property(e => e.ImportTime).HasComment("导入日期"); entity.Property(e => e.IsPrint).HasComment("检查所见"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -1905,6 +1865,8 @@ public class PeisDbContext : .WithMany(p => p.ItemTemplateDetails) .HasForeignKey(d => d.ItemTemplateId) .HasConstraintName("fk_item_te"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -2115,6 +2077,8 @@ public class PeisDbContext : .WithMany(p => p.MedicalPackageDetails) .HasForeignKey(d => d.MedicalPackageId) .HasConstraintName("fk_medica2"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -2242,7 +2206,7 @@ public class PeisDbContext : .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_medical"); - + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -2329,6 +2293,9 @@ public class PeisDbContext : .HasForeignKey(d => d.PoisonId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_patient_poison_poison"); + + entity.ConfigureByConvention(); + }); builder.Entity(entity => @@ -2476,6 +2443,8 @@ public class PeisDbContext : .HasForeignKey(d => d.SymptomId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_patient_symptom_symptom"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -2863,6 +2832,9 @@ public class PeisDbContext : // .HasConstraintName("fk_registe"); + entity.ConfigureByConvention(); + + }); builder.Entity(entity => @@ -2965,6 +2937,8 @@ public class PeisDbContext : .HasForeignKey(d => d.ResultStatusId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_register_item_result_status"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3172,6 +3146,8 @@ public class PeisDbContext : .WithMany(p => p.SampleGroupDetails) .HasForeignKey(d => d.SampleGroupId) .HasConstraintName("fk_sample_"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3373,6 +3349,8 @@ public class PeisDbContext : .WithMany(p => p.SumDiagnoses) .HasForeignKey(d => d.PatientRegisterId) .HasConstraintName("fk_sum_dia"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3522,6 +3500,8 @@ public class PeisDbContext : .HasForeignKey(d => d.SysParmId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_sys_parm_value_sys_parm"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3542,6 +3522,8 @@ public class PeisDbContext : .HasForeignKey(d => d.SysParmId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("fk_sys_par"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3631,6 +3613,8 @@ public class PeisDbContext : .WithMany(p => p.UserDepartments) .HasForeignKey(d => d.UserId) .HasConstraintName("fk_user_o2"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3651,6 +3635,8 @@ public class PeisDbContext : .WithMany(p => p.UserGroupings) .HasForeignKey(d => d.UserId) .HasConstraintName("fk_user_grouping_users"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3676,6 +3662,8 @@ public class PeisDbContext : .WithMany(p => p.UserItemTypes) .HasForeignKey(d => d.UserId) .HasConstraintName("fk_user_item_type_users"); + + entity.ConfigureByConvention(); }); builder.Entity(entity => @@ -3693,6 +3681,8 @@ public class PeisDbContext : { entity.HasKey(e => new { e.UserId, e.OrganizationUnitId }) .HasName("pk_user_organizationunitid"); + + entity.ConfigureByConvention(); }); @@ -3777,6 +3767,9 @@ public class PeisDbContext : entity.ApplyObjectExtensionMappings(); }); + + + #endregion } diff --git a/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityFrameworkCoreModule.cs b/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityFrameworkCoreModule.cs index 0ac50c3..f5c1f1e 100644 --- a/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityFrameworkCoreModule.cs +++ b/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityFrameworkCoreModule.cs @@ -53,5 +53,7 @@ public class PeisEntityFrameworkCoreModule : AbpModule options.UseNpgsql(); }); + + } } diff --git a/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityTypeBuilder.cs b/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityTypeBuilder.cs new file mode 100644 index 0000000..75345d4 --- /dev/null +++ b/src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisEntityTypeBuilder.cs @@ -0,0 +1,287 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using System; +using Volo.Abp; +using Volo.Abp.Auditing; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; +using Volo.Abp.EntityFrameworkCore.ValueComparers; +using Volo.Abp.EntityFrameworkCore.ValueConverters; +using Volo.Abp.MultiTenancy; +using Volo.Abp.ObjectExtending; + +namespace Shentun.Peis.EntityFrameworkCore +{ + public static class PeisEntityTypeBuilder + { + 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(); + b.TryConfigureId(); + } + + + public static void ConfigureId(this EntityTypeBuilder b) where T : class + { + b.As().TryConfigureId(); + } + + public static void TryConfigureId(this EntityTypeBuilder b) + { + + var props = b.Metadata.ClrType.GetProperties(); + foreach (var prop in props) + { + if (prop.Name == "Id") + { + b.Property("Id").HasColumnName("id"); + } + } + + } + + + + public static void ConfigureConcurrencyStamp(this EntityTypeBuilder b) where T : class, IHasConcurrencyStamp + { + b.As().TryConfigureConcurrencyStamp(); + } + + public static void TryConfigureConcurrencyStamp(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("ConcurrencyStamp").IsConcurrencyToken().HasMaxLength(40) + .HasColumnName("concurrency_stamp"); + } + } + + public static void ConfigureExtraProperties(this EntityTypeBuilder b) where T : class, IHasExtraProperties + { + b.As().TryConfigureExtraProperties(); + } + + public static void TryConfigureExtraProperties(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("ExtraProperties").HasColumnName("ExtraProperties").HasConversion(new ExtraPropertiesValueConverter(b.Metadata.ClrType)) + .Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer()); + b.TryConfigureObjectExtensions(); + } + } + + public static void ConfigureObjectExtensions(this EntityTypeBuilder b) where T : class, IHasExtraProperties + { + b.As().TryConfigureObjectExtensions(); + } + + public static void TryConfigureObjectExtensions(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + ObjectExtensionManager.Instance.ConfigureEfCoreEntity(b); + } + } + + public static void ApplyObjectExtensionMappings(this EntityTypeBuilder b) + { + ObjectExtensionManager.Instance.ConfigureEfCoreEntity(b); + } + + public static void ConfigureSoftDelete(this EntityTypeBuilder b) where T : class, ISoftDelete + { + b.As().TryConfigureSoftDelete(); + } + + public static void TryConfigureSoftDelete(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("IsDeleted").IsRequired().HasDefaultValue(false) + .HasColumnName("IsDeleted"); + } + } + + public static void ConfigureDeletionTime(this EntityTypeBuilder b) where T : class, IHasDeletionTime + { + b.As().TryConfigureDeletionTime(); + } + + public static void TryConfigureDeletionTime(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.TryConfigureSoftDelete(); + b.Property("DeletionTime").IsRequired(required: false).HasColumnName("DeletionTime"); + } + } + + public static void ConfigureMayHaveCreator(this EntityTypeBuilder b) where T : class, IMayHaveCreator + { + b.As().TryConfigureMayHaveCreator(); + } + + public static void TryConfigureMayHaveCreator(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("CreatorId").IsRequired(required: false).HasColumnName("creator_id"); + } + } + + public static void ConfigureMustHaveCreator(this EntityTypeBuilder b) where T : class, IMustHaveCreator + { + b.As().TryConfigureMustHaveCreator(); + } + + public static void TryConfigureMustHaveCreator(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("CreatorId").IsRequired().HasColumnName("creator_id"); + } + } + + public static void ConfigureDeletionAudited(this EntityTypeBuilder b) where T : class, IDeletionAuditedObject + { + b.As().TryConfigureDeletionAudited(); + } + + public static void TryConfigureDeletionAudited(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.TryConfigureDeletionTime(); + b.Property("DeleterId").IsRequired(required: false).HasColumnName("DeleterId"); + } + } + + public static void ConfigureCreationTime(this EntityTypeBuilder b) where T : class, IHasCreationTime + { + b.As().TryConfigureCreationTime(); + } + + public static void TryConfigureCreationTime(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("CreationTime").IsRequired().HasColumnName("creation_time"); + } + } + + public static void ConfigureCreationAudited(this EntityTypeBuilder b) where T : class, ICreationAuditedObject + { + b.As().TryConfigureCreationAudited(); + } + + public static void TryConfigureCreationAudited(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.As().TryConfigureCreationTime(); + b.As().TryConfigureMayHaveCreator(); + } + } + + public static void ConfigureLastModificationTime(this EntityTypeBuilder b) where T : class, IHasModificationTime + { + b.As().TryConfigureLastModificationTime(); + } + + public static void TryConfigureLastModificationTime(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("LastModificationTime").IsRequired(required: false).HasColumnName("last_modification_time"); + } + } + + public static void ConfigureModificationAudited(this EntityTypeBuilder b) where T : class, IModificationAuditedObject + { + b.As().TryConfigureModificationAudited(); + } + + public static void TryConfigureModificationAudited(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.TryConfigureLastModificationTime(); + b.Property("LastModifierId").IsRequired(required: false).HasColumnName("last_modifier_id"); + } + } + + public static void ConfigureAudited(this EntityTypeBuilder b) where T : class, IAuditedObject + { + b.As().TryConfigureAudited(); + } + + public static void TryConfigureAudited(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.As().TryConfigureCreationAudited(); + b.As().TryConfigureModificationAudited(); + } + } + + public static void ConfigureFullAudited(this EntityTypeBuilder b) where T : class, IFullAuditedObject + { + b.As().TryConfigureFullAudited(); + } + + public static void TryConfigureFullAudited(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.As().TryConfigureAudited(); + b.As().TryConfigureDeletionAudited(); + } + } + + public static void ConfigureMultiTenant(this EntityTypeBuilder b) where T : class, IMultiTenant + { + b.As().TryConfigureMultiTenant(); + } + + public static void TryConfigureMultiTenant(this EntityTypeBuilder b) + { + if (b.Metadata.ClrType.IsAssignableTo()) + { + b.Property("TenantId").IsRequired(required: false).HasColumnName("TenantId"); + } + } + + public static void ConfigureCreationAuditedAggregateRoot(this EntityTypeBuilder b) where T : class + { + b.As().TryConfigureCreationAudited(); + b.As().TryConfigureExtraProperties(); + b.As().TryConfigureConcurrencyStamp(); + } + + public static void ConfigureAuditedAggregateRoot(this EntityTypeBuilder b) where T : class + { + b.As().TryConfigureAudited(); + b.As().TryConfigureExtraProperties(); + b.As().TryConfigureConcurrencyStamp(); + } + + public static void ConfigureFullAuditedAggregateRoot(this EntityTypeBuilder b) where T : class + { + b.As().TryConfigureFullAudited(); + b.As().TryConfigureExtraProperties(); + b.As().TryConfigureConcurrencyStamp(); + } + } +}