From 349d65d05056cfe66ec1a4ebcf4d5d00b88fc3bb Mon Sep 17 00:00:00 2001 From: TekH Date: Tue, 1 Jul 2025 13:07:40 +0200 Subject: [PATCH] Update DbTriggerParams and EF Core package versions - Changed DbTriggerParams to use ICollection for flexibility. - Updated Microsoft.EntityFrameworkCore.SqlServer to version 9.0.6. - Made _logger in EGDbContext nullable and optional in constructor. - Updated logging statements to prevent null reference exceptions. - Added Microsoft.EntityFrameworkCore.SqlServer package for net8.0 and net9.0. - Introduced appsettings.migration.json for connection strings and trigger parameters. - Added EGDbContextFactory for design-time DbContext creation. --- .../Configurations/DbTriggerParams.cs | 2 +- .../EnvelopeGenerator.GeneratorAPI.csproj | 2 +- .../EGDbContext.cs | 6 +-- .../EGDbContextFactory.cs | 44 +++++++++++++++++++ .../EnvelopeGenerator.Infrastructure.csproj | 9 ++++ .../appsettings.migration.json | 13 ++++++ .../EnvelopeGenerator.Web.csproj | 2 +- 7 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 EnvelopeGenerator.Infrastructure/EGDbContextFactory.cs create mode 100644 EnvelopeGenerator.Infrastructure/appsettings.migration.json diff --git a/EnvelopeGenerator.Application/Configurations/DbTriggerParams.cs b/EnvelopeGenerator.Application/Configurations/DbTriggerParams.cs index 1afac966..bee12085 100644 --- a/EnvelopeGenerator.Application/Configurations/DbTriggerParams.cs +++ b/EnvelopeGenerator.Application/Configurations/DbTriggerParams.cs @@ -3,6 +3,6 @@ /// /// /// -public class DbTriggerParams : Dictionary> +public class DbTriggerParams : Dictionary> { } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj b/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj index c5b1398d..60af0f1f 100644 --- a/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj +++ b/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj @@ -22,7 +22,7 @@ - + diff --git a/EnvelopeGenerator.Infrastructure/EGDbContext.cs b/EnvelopeGenerator.Infrastructure/EGDbContext.cs index 177143d4..59d6306a 100644 --- a/EnvelopeGenerator.Infrastructure/EGDbContext.cs +++ b/EnvelopeGenerator.Infrastructure/EGDbContext.cs @@ -59,9 +59,9 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext private readonly DbTriggerParams _triggers; - private readonly ILogger _logger; + private readonly ILogger? _logger; - public EGDbContext(DbContextOptions options, IOptions triggerParamOptions, ILogger logger) : base(options) + public EGDbContext(DbContextOptions options, IOptions triggerParamOptions, ILogger? logger = null) : base(options) { _triggers = triggerParamOptions.Value; _logger = logger; @@ -151,7 +151,7 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext .ForEach(tName => { modelBuilder.Entity().ToTable(tb => tb.HasTrigger(tName)); - _logger.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name); + _logger?.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name); }); // TODO: call add trigger methods with attributes and reflection diff --git a/EnvelopeGenerator.Infrastructure/EGDbContextFactory.cs b/EnvelopeGenerator.Infrastructure/EGDbContextFactory.cs new file mode 100644 index 00000000..da55e888 --- /dev/null +++ b/EnvelopeGenerator.Infrastructure/EGDbContextFactory.cs @@ -0,0 +1,44 @@ +using EnvelopeGenerator.Application.Configurations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Options; + +namespace EnvelopeGenerator.Infrastructure +{ + public class EGDbContextFactory : IDesignTimeDbContextFactory + { + public EGDbContext CreateDbContext(string[] args) + { + var config = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) // Önemli! + .AddJsonFile("appsettings.migration.json") + .Build(); + + // create DbContextOptions + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseSqlServer(config.GetConnectionString("Default")); + + // create DbTriggerParams + var triggerLists = config.GetSection("DbTriggerParams").Get>>(); + var dbTriggerParams = new DbTriggerParams(); + if(triggerLists is not null) + foreach (var triggerList in triggerLists) + { + if(triggerList.Value.Count == 0) + continue; // Skip empty trigger lists + + var tableName = triggerList.Key; + + dbTriggerParams[tableName] = new List(); + + foreach (var trigger in triggerList.Value) + { + dbTriggerParams[tableName].Add(trigger); + } + } + + return new EGDbContext(optionsBuilder.Options, Options.Create(dbTriggerParams)); + } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj b/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj index f8273018..e91ac650 100644 --- a/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj +++ b/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj @@ -27,6 +27,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + @@ -36,6 +37,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + @@ -45,6 +47,13 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + PreserveNewest + \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/appsettings.migration.json b/EnvelopeGenerator.Infrastructure/appsettings.migration.json new file mode 100644 index 00000000..82fb23a3 --- /dev/null +++ b/EnvelopeGenerator.Infrastructure/appsettings.migration.json @@ -0,0 +1,13 @@ +{ + "ConnectionStrings": { + "Default": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM_DATA_MIGR_TEST;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;" + }, + "DbTriggerParams": { + "Envelope": [ "TBSIG_ENVELOPE_HISTORY_AFT_INS" ], + "EnvelopeHistory": [ "TBSIG_ENVELOPE_HISTORY_AFT_INS" ], + "EmailOut": [ "TBEMLP_EMAIL_OUT_AFT_INS", "TBEMLP_EMAIL_OUT_AFT_UPD" ], + "EnvelopeReceiverReadOnly": [ "TBSIG_ENVELOPE_RECEIVER_READ_ONLY_UPD" ], + "Receiver": [], + "EmailTemplate": [ "TBSIG_EMAIL_TEMPLATE_AFT_UPD" ] + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj b/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj index f52b0610..765ac80c 100644 --- a/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj +++ b/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj @@ -2113,7 +2113,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - +