diff --git a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs new file mode 100644 index 0000000000..bf8b7215a0 --- /dev/null +++ b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using OpenIddict.EntityFrameworkCore.Models; +using VirtoCommerce.Platform.Core.Security; +using VirtoCommerce.Platform.Data.Model; +using VirtoCommerce.Platform.Security.Model; + +namespace VirtoCommerce.Platform.Data.SqlServer; +public class ApplicationUserConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class UserApiKeyEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class RoleConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class UserPasswordHistoryEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class ServerCertificateEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class IdentityRoleClaimConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} +public class IdentityUserClaimConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class IdentityUserLoginConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class IdentityUserTokenConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} +public class IdentityUserRoleConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class OpenIddictTokenConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class OpenIddictApplicationConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class OpenIddictScopeConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class OpenIddictAuthorizationConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} diff --git a/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs b/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs index 36f8e1e04a..f27afca191 100644 --- a/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs +++ b/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs @@ -1,4 +1,6 @@ using System; +using System.Reflection; +using System.Reflection.Emit; using System.Threading; using System.Threading.Tasks; using EntityFrameworkCore.Triggers; @@ -90,6 +92,20 @@ protected override void OnModelCreating(ModelBuilder builder) builder.Entity().ToEntityTable(nameof(ServerCertificate)); builder.Entity().Property(x => x.PrivateKeyCertPassword).HasMaxLength(Length128); + // Allows configuration for an entity type for different database types. + // Applies configuration from all + switch (Database.ProviderName) + { + case "Pomelo.EntityFrameworkCore.MySql": + builder.ApplyConfigurationsFromAssembly(Assembly.Load("VirtoCommerce.Platform.Data.MySql")); + break; + case "Npgsql.EntityFrameworkCore.PostgreSQL": + builder.ApplyConfigurationsFromAssembly(Assembly.Load("VirtoCommerce.Platform.Data.PostgreSql")); + break; + case "Microsoft.EntityFrameworkCore.SqlServer": + builder.ApplyConfigurationsFromAssembly(Assembly.Load("VirtoCommerce.Platform.Data.SqlServer")); + break; + } } #region override Save*** methods to catch save events in Triggers, otherwise ApplicationUser not be catched because SecurityDbContext can't inherit DbContextWithTriggers