Browse Source

Merge pull request #696 from abpframework/AbpEntityTypeBuilderExtensions-ConfigureByConvention

Resolved #695 : Create a single method to configure EF core entity ma…
pull/699/head
Halil İbrahim Kalkan 8 years ago
committed by GitHub
parent
commit
d336c55720
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 187
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs

187
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs

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

Loading…
Cancel
Save