|
|
|
@ -16,7 +16,15 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling |
|
|
|
{ |
|
|
|
b.TryConfigureConcurrencyStamp(); |
|
|
|
b.TryConfigureExtraProperties(); |
|
|
|
//TODO: Others
|
|
|
|
b.TryConfigureMayHaveCreator(); |
|
|
|
b.TryConfigureMustHaveCreator(); |
|
|
|
b.TryConfigureSoftDelete(); |
|
|
|
b.TryConfigureDeletionTime(); |
|
|
|
b.TryConfigureDeletionAudited(); |
|
|
|
b.TryConfigureCreationTime(); |
|
|
|
b.TryConfigureLastModificationTime(); |
|
|
|
b.TryConfigureModificationAudited(); |
|
|
|
b.TryConfigureMultiTenant(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureConcurrencyStamp<T>(this EntityTypeBuilder<T> b) |
|
|
|
@ -30,7 +38,7 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IHasConcurrencyStamp>()) |
|
|
|
{ |
|
|
|
//TODO: Max length?
|
|
|
|
b.Property<string>(nameof(IHasConcurrencyStamp.ConcurrencyStamp)) |
|
|
|
b.Property(nameof(IHasConcurrencyStamp.ConcurrencyStamp)) |
|
|
|
.IsConcurrencyToken() |
|
|
|
.HasColumnName(nameof(IHasConcurrencyStamp.ConcurrencyStamp)); |
|
|
|
} |
|
|
|
@ -56,103 +64,200 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//TODO: Others like ConfigureConcurrencyStamp/TryConfigureConcurrencyStamp and ConfigureExtraProperties/TryConfigureExtraProperties
|
|
|
|
|
|
|
|
public static void ConfigureSoftDelete<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, ISoftDelete |
|
|
|
{ |
|
|
|
b.Property(x => x.IsDeleted) |
|
|
|
.IsRequired() |
|
|
|
.HasDefaultValue(false) |
|
|
|
.HasColumnName(nameof(ISoftDelete.IsDeleted)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureSoftDelete(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureSoftDelete(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<ISoftDelete>()) |
|
|
|
{ |
|
|
|
b.Property(nameof(ISoftDelete.IsDeleted)) |
|
|
|
.IsRequired() |
|
|
|
.HasDefaultValue(false) |
|
|
|
.HasColumnName(nameof(ISoftDelete.IsDeleted)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureDeletionTime<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IHasDeletionTime |
|
|
|
{ |
|
|
|
b.ConfigureSoftDelete(); |
|
|
|
b.Property(x => x.DeletionTime) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IHasDeletionTime.DeletionTime)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureDeletionTime(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureDeletionTime(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IHasDeletionTime>()) |
|
|
|
{ |
|
|
|
b.TryConfigureSoftDelete(); |
|
|
|
|
|
|
|
b.Property(nameof(IHasDeletionTime.DeletionTime)) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IHasDeletionTime.DeletionTime)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureMayHaveCreator<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IMayHaveCreator |
|
|
|
{ |
|
|
|
b.Property(x => x.CreatorId) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IMayHaveCreator.CreatorId)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureMayHaveCreator(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureMayHaveCreator(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IMayHaveCreator>()) |
|
|
|
{ |
|
|
|
b.Property(nameof(IMayHaveCreator.CreatorId)) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IMayHaveCreator.CreatorId)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureMustHaveCreator<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IMustHaveCreator |
|
|
|
{ |
|
|
|
b.Property(x => x.CreatorId) |
|
|
|
.IsRequired() |
|
|
|
.HasColumnName(nameof(IMustHaveCreator.CreatorId)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureMustHaveCreator(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureMustHaveCreator(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IMustHaveCreator>()) |
|
|
|
{ |
|
|
|
b.Property(nameof(IMustHaveCreator.CreatorId)) |
|
|
|
.IsRequired() |
|
|
|
.HasColumnName(nameof(IMustHaveCreator.CreatorId)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureDeletionAudited<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IDeletionAuditedObject |
|
|
|
{ |
|
|
|
b.ConfigureDeletionTime(); |
|
|
|
b.Property(x => x.DeleterId) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IDeletionAuditedObject.DeleterId)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureDeletionAudited(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureDeletionAudited(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IDeletionAuditedObject>()) |
|
|
|
{ |
|
|
|
b.TryConfigureDeletionTime(); |
|
|
|
|
|
|
|
b.Property(nameof(IDeletionAuditedObject.DeleterId)) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IDeletionAuditedObject.DeleterId)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureCreationTime<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IHasCreationTime |
|
|
|
{ |
|
|
|
b.Property(x => x.CreationTime) |
|
|
|
.IsRequired() |
|
|
|
.HasColumnName(nameof(IHasCreationTime.CreationTime)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureCreationTime(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureCreationTime(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IHasCreationTime>()) |
|
|
|
{ |
|
|
|
b.Property(nameof(IHasCreationTime.CreationTime)) |
|
|
|
.IsRequired() |
|
|
|
.HasColumnName(nameof(IHasCreationTime.CreationTime)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureCreationAudited<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, ICreationAuditedObject |
|
|
|
{ |
|
|
|
b.ConfigureCreationTime(); |
|
|
|
b.ConfigureMayHaveCreator(); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureCreationAudited(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureCreationAudited(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<ICreationAuditedObject>()) |
|
|
|
{ |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureCreationTime(); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureMayHaveCreator(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureLastModificationTime<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IHasModificationTime |
|
|
|
{ |
|
|
|
b.Property(x => x.LastModificationTime) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IHasModificationTime.LastModificationTime)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureLastModificationTime(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureLastModificationTime(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IHasModificationTime>()) |
|
|
|
{ |
|
|
|
b.Property(nameof(IHasModificationTime.LastModificationTime)) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IHasModificationTime.LastModificationTime)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureModificationAudited<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IModificationAuditedObject |
|
|
|
{ |
|
|
|
b.ConfigureLastModificationTime(); |
|
|
|
b.Property(x => x.LastModifierId) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IModificationAuditedObject.LastModifierId)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureModificationAudited(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureModificationAudited(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IModificationAuditedObject>()) |
|
|
|
{ |
|
|
|
b.TryConfigureLastModificationTime(); |
|
|
|
|
|
|
|
b.Property(nameof(IModificationAuditedObject.LastModifierId)) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IModificationAuditedObject.LastModifierId)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureAudited<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IAuditedObject |
|
|
|
{ |
|
|
|
b.ConfigureCreationAudited(); |
|
|
|
b.ConfigureModificationAudited(); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureAudited(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureAudited(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IAuditedObject>()) |
|
|
|
{ |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureCreationAudited(); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureModificationAudited(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureFullAudited<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IFullAuditedObject |
|
|
|
{ |
|
|
|
b.ConfigureAudited(); |
|
|
|
b.ConfigureDeletionAudited(); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureFullAudited(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureFullAudited(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IFullAuditedObject>()) |
|
|
|
{ |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureAudited(); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureDeletionAudited(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void ConfigureMultiTenant<T>(this EntityTypeBuilder<T> b) |
|
|
|
where T : class, IMultiTenant |
|
|
|
{ |
|
|
|
b.Property(x => x.TenantId) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IMultiTenant.TenantId)); |
|
|
|
b.As<EntityTypeBuilder>().TryConfigureMultiTenant(); |
|
|
|
} |
|
|
|
|
|
|
|
public static void TryConfigureMultiTenant(this EntityTypeBuilder b) |
|
|
|
{ |
|
|
|
if (b.Metadata.ClrType.IsAssignableTo<IMultiTenant>()) |
|
|
|
{ |
|
|
|
b.Property(nameof(IMultiTenant.TenantId)) |
|
|
|
.IsRequired(false) |
|
|
|
.HasColumnName(nameof(IMultiTenant.TenantId)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//TODO: Add other interfaces (IAuditedObject<TUser>...)
|
|
|
|
|