Skip to content

Commit 9bfa659

Browse files
committed
feat: Add ToEntityTable() and ToAuditableEntityTable() extension methods
1 parent 83cbaaf commit 9bfa659

File tree

5 files changed

+118
-105
lines changed

5 files changed

+118
-105
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using VirtoCommerce.Platform.Core.Common;
4+
using static VirtoCommerce.Platform.Data.Infrastructure.DbContextBase;
5+
6+
namespace VirtoCommerce.Platform.Data.Extensions;
7+
8+
public static class ModelBuilderExtensions
9+
{
10+
public static EntityTypeBuilder<TEntity> ToAuditableEntityTable<TEntity>(this EntityTypeBuilder<TEntity> entityTypeBuilder, string name)
11+
where TEntity : AuditableEntity
12+
{
13+
entityTypeBuilder.ToEntityTable(name);
14+
entityTypeBuilder.Property(x => x.CreatedBy).HasMaxLength(UserNameLength);
15+
entityTypeBuilder.Property(x => x.ModifiedBy).HasMaxLength(UserNameLength);
16+
17+
return entityTypeBuilder;
18+
}
19+
20+
public static EntityTypeBuilder<TEntity> ToEntityTable<TEntity>(this EntityTypeBuilder<TEntity> entityTypeBuilder, string name)
21+
where TEntity : Entity
22+
{
23+
entityTypeBuilder.ToTable(name).HasKey(x => x.Id);
24+
entityTypeBuilder.Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
25+
26+
return entityTypeBuilder;
27+
}
28+
}

src/VirtoCommerce.Platform.Data/Infrastructure/DbContextBase.cs

+13-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,19 @@ namespace VirtoCommerce.Platform.Data.Infrastructure
99
/// </summary>
1010
public class DbContextBase : DbContextWithTriggers
1111
{
12-
public const int IdLength = 128;
12+
public const int CultureNameLength = Length16;
13+
public const int IdLength = Length128;
14+
public const int UrlLength = Length2048;
15+
public const int UserNameLength = Length64;
16+
17+
public const int Length16 = 16;
18+
public const int Length32 = 32;
19+
public const int Length64 = 64;
20+
public const int Length128 = 128;
21+
public const int Length256 = 256;
22+
public const int Length512 = 512;
23+
public const int Length1024 = 1024;
24+
public const int Length2048 = 2048;
1325

1426
public DbContextBase()
1527
{

src/VirtoCommerce.Platform.Data/Model/OperationLogEntity.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class OperationLogEntity : AuditableEntity
1919
public string OperationType { get; set; }
2020

2121

22-
[StringLength(1024)]
22+
[StringLength(2048)]
2323
public string Detail { get; set; }
2424

2525
public virtual OperationLog ToModel(OperationLog operation)

src/VirtoCommerce.Platform.Data/Repositories/PlatformDbContext.cs

+36-59
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using Microsoft.EntityFrameworkCore;
3+
using VirtoCommerce.Platform.Data.Extensions;
34
using VirtoCommerce.Platform.Data.Infrastructure;
45
using VirtoCommerce.Platform.Data.Localizations;
56
using VirtoCommerce.Platform.Data.Model;
@@ -8,10 +9,13 @@ namespace VirtoCommerce.Platform.Data.Repositories
89
{
910
public class PlatformDbContext : DbContextBase
1011
{
11-
[Obsolete("Use IdLength", DiagnosticId = "VC0009", UrlFormat = "https://docs.virtocommerce.org/products/products-virto3-versions")]
12+
[Obsolete("Use Length128 or IdLength", DiagnosticId = "VC0009", UrlFormat = "https://docs.virtocommerce.org/products/products-virto3-versions")]
1213
protected const int _idLength128 = 128;
1314

15+
[Obsolete("Use Length64 or UserNameLength", DiagnosticId = "VC0010", UrlFormat = "https://docs.virtocommerce.org/products/products-virto3-versions")]
1416
protected const int _idLength64 = 64;
17+
18+
[Obsolete("Use Length2048", DiagnosticId = "VC0010", UrlFormat = "https://docs.virtocommerce.org/products/products-virto3-versions")]
1519
protected const int _idLength2048 = 2048;
1620

1721
public PlatformDbContext(DbContextOptions<PlatformDbContext> options)
@@ -29,108 +33,81 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
2933
base.OnModelCreating(modelBuilder);
3034

3135
#region Change logging
32-
modelBuilder.Entity<OperationLogEntity>().ToTable("PlatformOperationLog").HasKey(x => x.Id);
33-
modelBuilder.Entity<OperationLogEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
34-
modelBuilder.Entity<OperationLogEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
35-
modelBuilder.Entity<OperationLogEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
36-
modelBuilder.Entity<OperationLogEntity>().Property(x => x.Detail).HasMaxLength(_idLength2048);
37-
modelBuilder.Entity<OperationLogEntity>().HasIndex(x => new { x.ObjectType, x.ObjectId })
36+
modelBuilder.Entity<OperationLogEntity>().ToAuditableEntityTable("PlatformOperationLog");
37+
modelBuilder.Entity<OperationLogEntity>()
38+
.HasIndex(x => new { x.ObjectType, x.ObjectId })
3839
.IsUnique(false)
3940
.HasDatabaseName("IX_OperationLog_ObjectType_ObjectId");
4041
#endregion
4142

4243
#region Settings
43-
modelBuilder.Entity<SettingEntity>().ToTable("PlatformSetting").HasKey(x => x.Id);
44-
modelBuilder.Entity<SettingEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
45-
modelBuilder.Entity<SettingEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
46-
modelBuilder.Entity<SettingEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
47-
modelBuilder.Entity<SettingEntity>().HasIndex(x => new { x.ObjectType, x.ObjectId })
44+
modelBuilder.Entity<SettingEntity>().ToAuditableEntityTable("PlatformSetting");
45+
modelBuilder.Entity<SettingEntity>()
46+
.HasIndex(x => new { x.ObjectType, x.ObjectId })
4847
.IsUnique(false)
4948
.HasDatabaseName("IX_ObjectType_ObjectId");
5049

51-
modelBuilder.Entity<SettingValueEntity>().ToTable("PlatformSettingValue").HasKey(x => x.Id);
52-
modelBuilder.Entity<SettingValueEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
53-
modelBuilder.Entity<SettingValueEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
54-
modelBuilder.Entity<SettingValueEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
55-
56-
modelBuilder.Entity<SettingValueEntity>().HasOne(x => x.Setting)
50+
modelBuilder.Entity<SettingValueEntity>().ToAuditableEntityTable("PlatformSettingValue");
51+
modelBuilder.Entity<SettingValueEntity>().Property(x => x.DecimalValue).HasColumnType("decimal(18,5)");
52+
modelBuilder.Entity<SettingValueEntity>()
53+
.HasOne(x => x.Setting)
5754
.WithMany(x => x.SettingValues)
5855
.HasForeignKey(x => x.SettingId)
5956
.OnDelete(DeleteBehavior.Cascade)
6057
.IsRequired();
61-
62-
modelBuilder.Entity<SettingValueEntity>()
63-
.Property(x => x.DecimalValue)
64-
.HasColumnType("decimal(18,5)");
65-
6658
#endregion
6759

6860
#region Localization
69-
modelBuilder.Entity<LocalizedItemEntity>().ToTable("PlatformLocalizedItem").HasKey(x => x.Id);
70-
modelBuilder.Entity<LocalizedItemEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
71-
modelBuilder.Entity<LocalizedItemEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
72-
modelBuilder.Entity<LocalizedItemEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
61+
modelBuilder.Entity<LocalizedItemEntity>().ToAuditableEntityTable("PlatformLocalizedItem");
7362
modelBuilder.Entity<LocalizedItemEntity>()
74-
.HasIndex(x => new { x.Name, x.Alias })
75-
.IsUnique(false)
76-
.HasDatabaseName("IX_PlatformLocalizedItem_Name_Alias");
63+
.HasIndex(x => new { x.Name, x.Alias })
64+
.IsUnique(false)
65+
.HasDatabaseName("IX_PlatformLocalizedItem_Name_Alias");
7766
#endregion
7867

7968
#region Dynamic Properties
80-
81-
modelBuilder.Entity<DynamicPropertyEntity>().ToTable("PlatformDynamicProperty").HasKey(x => x.Id);
82-
modelBuilder.Entity<DynamicPropertyEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
83-
modelBuilder.Entity<DynamicPropertyEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
84-
modelBuilder.Entity<DynamicPropertyEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
85-
modelBuilder.Entity<DynamicPropertyEntity>().HasIndex(x => new { x.ObjectType, x.Name })
69+
modelBuilder.Entity<DynamicPropertyEntity>().ToAuditableEntityTable("PlatformDynamicProperty");
70+
modelBuilder.Entity<DynamicPropertyEntity>()
71+
.HasIndex(x => new { x.ObjectType, x.Name })
8672
.HasDatabaseName("IX_PlatformDynamicProperty_ObjectType_Name")
87-
.IsUnique(true);
73+
.IsUnique();
8874

89-
modelBuilder.Entity<DynamicPropertyNameEntity>().ToTable("PlatformDynamicPropertyName").HasKey(x => x.Id);
90-
modelBuilder.Entity<DynamicPropertyNameEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
91-
modelBuilder.Entity<DynamicPropertyNameEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
92-
modelBuilder.Entity<DynamicPropertyNameEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
93-
modelBuilder.Entity<DynamicPropertyNameEntity>().HasOne(x => x.Property)
75+
modelBuilder.Entity<DynamicPropertyNameEntity>().ToAuditableEntityTable("PlatformDynamicPropertyName");
76+
modelBuilder.Entity<DynamicPropertyNameEntity>()
77+
.HasOne(x => x.Property)
9478
.WithMany(x => x.DisplayNames)
9579
.HasForeignKey(x => x.PropertyId)
9680
.OnDelete(DeleteBehavior.Cascade);
9781
modelBuilder.Entity<DynamicPropertyNameEntity>()
9882
.HasIndex(x => new { x.PropertyId, x.Locale, x.Name })
9983
.HasDatabaseName("IX_PlatformDynamicPropertyName_PropertyId_Locale_Name")
100-
.IsUnique(true);
84+
.IsUnique();
10185

102-
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>().ToTable("PlatformDynamicPropertyDictionaryItem").HasKey(x => x.Id);
103-
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
104-
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
105-
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
106-
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>().HasOne(x => x.Property)
86+
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>().ToAuditableEntityTable("PlatformDynamicPropertyDictionaryItem");
87+
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>()
88+
.HasOne(x => x.Property)
10789
.WithMany(x => x.DictionaryItems)
10890
.HasForeignKey(x => x.PropertyId)
10991
.OnDelete(DeleteBehavior.Cascade);
11092
modelBuilder.Entity<DynamicPropertyDictionaryItemEntity>()
11193
.HasIndex(x => new { x.PropertyId, x.Name })
11294
.HasDatabaseName("IX_PlatformDynamicPropertyDictionaryItem_PropertyId_Name")
113-
.IsUnique(true);
95+
.IsUnique();
11496

115-
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>().ToTable("PlatformDynamicPropertyDictionaryItemName").HasKey(x => x.Id);
116-
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
117-
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>().Property(x => x.CreatedBy).HasMaxLength(_idLength64);
118-
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>().Property(x => x.ModifiedBy).HasMaxLength(_idLength64);
119-
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>().HasOne(x => x.DictionaryItem)
97+
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>().ToAuditableEntityTable("PlatformDynamicPropertyDictionaryItemName");
98+
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>()
99+
.HasOne(x => x.DictionaryItem)
120100
.WithMany(x => x.DisplayNames)
121101
.HasForeignKey(x => x.DictionaryItemId)
122102
.OnDelete(DeleteBehavior.Cascade);
123103
modelBuilder.Entity<DynamicPropertyDictionaryItemNameEntity>()
124104
.HasIndex(x => new { x.DictionaryItemId, x.Locale, x.Name })
125105
.HasDatabaseName("IX_PlatformDynamicPropertyDictionaryItemName_DictionaryItemId_Locale_Name")
126-
.IsUnique(true);
127-
106+
.IsUnique();
128107
#endregion
129108

130109
#region Raw license
131-
modelBuilder.Entity<RawLicenseEntity>().ToTable("RawLicense").HasKey(x => x.Id);
132-
modelBuilder.Entity<RawLicenseEntity>().Property(x => x.Id).HasMaxLength(IdLength).ValueGeneratedOnAdd();
133-
modelBuilder.Entity<RawLicenseEntity>().Property(x => x.Data);
110+
modelBuilder.Entity<RawLicenseEntity>().ToEntityTable("RawLicense");
134111
#endregion
135112
}
136113
}

0 commit comments

Comments
 (0)