diff --git a/src/BuildingBlocks/EFCore/AppDbContextBase.cs b/src/BuildingBlocks/EFCore/AppDbContextBase.cs index b826f3c..4ffcccc 100644 --- a/src/BuildingBlocks/EFCore/AppDbContextBase.cs +++ b/src/BuildingBlocks/EFCore/AppDbContextBase.cs @@ -4,7 +4,6 @@ using System.Collections.Immutable; using BuildingBlocks.Core.Event; using BuildingBlocks.Core.Model; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Storage; using System.Data; using Web; using Exception = System.Exception; @@ -75,7 +74,7 @@ public abstract class AppDbContextBase : DbContext, IDbContext foreach (var entry in ChangeTracker.Entries()) { var isAuditable = entry.Entity.GetType().IsAssignableTo(typeof(IAggregate)); - var userId = _currentUserProvider.GetCurrentUserId(); + var userId = _currentUserProvider?.GetCurrentUserId() ?? 0; if (isAuditable) { diff --git a/src/BuildingBlocks/EFCore/Extensions.cs b/src/BuildingBlocks/EFCore/Extensions.cs index e6d74ba..bb3b0c0 100644 --- a/src/BuildingBlocks/EFCore/Extensions.cs +++ b/src/BuildingBlocks/EFCore/Extensions.cs @@ -32,12 +32,12 @@ public static class Extensions Guard.Against.Null(options, nameof(postgresOptions)); options.UseNpgsql(postgresOptions?.ConnectionString, - dbOptions => - { - dbOptions.MigrationsAssembly(typeof(TContext).Assembly.GetName().Name); - //ref: https://learn.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency - dbOptions.EnableRetryOnFailure(3, TimeSpan.FromSeconds(1), null); - }) + dbOptions => + { + dbOptions.MigrationsAssembly(typeof(TContext).Assembly.GetName().Name); + //ref: https://learn.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency + dbOptions.EnableRetryOnFailure(3, TimeSpan.FromSeconds(1), null); + }) // https://github.com/efcore/EFCore.NamingConventions .UseSnakeCaseNamingConvention(); }); @@ -88,7 +88,8 @@ public static class Extensions // Replace table names entity.SetTableName(entity.GetTableName()?.Underscore()); - var tableObjectIdentifier = StoreObjectIdentifier.Table(entity.GetTableName()?.Underscore()!, entity.GetSchema()); + var tableObjectIdentifier = + StoreObjectIdentifier.Table(entity.GetTableName()?.Underscore()!, entity.GetSchema()); // Replace column names foreach (var property in entity.GetProperties()) diff --git a/src/BuildingBlocks/PersistMessageProcessor/Data/PersistMessageDbContext.cs b/src/BuildingBlocks/PersistMessageProcessor/Data/PersistMessageDbContext.cs index c5058e5..0b4df06 100644 --- a/src/BuildingBlocks/PersistMessageProcessor/Data/PersistMessageDbContext.cs +++ b/src/BuildingBlocks/PersistMessageProcessor/Data/PersistMessageDbContext.cs @@ -8,6 +8,7 @@ using Configurations; using Core.Model; using global::Polly; using Microsoft.Extensions.Logging; +using Exception = System.Exception; public class PersistMessageDbContext : DbContext, IPersistMessageDbContext { @@ -69,18 +70,25 @@ public class PersistMessageDbContext : DbContext, IPersistMessageDbContext private void OnBeforeSaving() { - foreach (var entry in ChangeTracker.Entries()) + try { - switch (entry.State) + foreach (var entry in ChangeTracker.Entries()) { - case EntityState.Modified: - entry.Entity.Version++; - break; + switch (entry.State) + { + case EntityState.Modified: + entry.Entity.Version++; + break; - case EntityState.Deleted: - entry.Entity.Version++; - break; + case EntityState.Deleted: + entry.Entity.Version++; + break; + } } } + catch (Exception ex) + { + throw new Exception("try for find IVersion", ex); + } } } diff --git a/src/Services/Flight/src/Flight/Data/DesignTimeDbContextFactory.cs b/src/Services/Flight/src/Flight/Data/DesignTimeDbContextFactory.cs index b9a7a6c..6047782 100644 --- a/src/Services/Flight/src/Flight/Data/DesignTimeDbContextFactory.cs +++ b/src/Services/Flight/src/Flight/Data/DesignTimeDbContextFactory.cs @@ -11,7 +11,7 @@ namespace Flight.Data builder.UseNpgsql("Server=localhost;Port=5432;Database=flight;User Id=postgres;Password=postgres;Include Error Detail=true") .UseSnakeCaseNamingConvention(); - return new FlightDbContext(builder.Options); + return new FlightDbContext(builder.Options, null); } } } diff --git a/src/Services/Flight/src/Flight/Data/FlightDbContext.cs b/src/Services/Flight/src/Flight/Data/FlightDbContext.cs index 96a18d9..b1945e3 100644 --- a/src/Services/Flight/src/Flight/Data/FlightDbContext.cs +++ b/src/Services/Flight/src/Flight/Data/FlightDbContext.cs @@ -10,7 +10,7 @@ using BuildingBlocks.Web; public sealed class FlightDbContext : AppDbContextBase { - public FlightDbContext(DbContextOptions options, ICurrentUserProvider currentUserProvider = default) : base( + public FlightDbContext(DbContextOptions options, ICurrentUserProvider currentUserProvider) : base( options, currentUserProvider) { } diff --git a/src/Services/Flight/tests/UnitTest/Common/DbContextFactory.cs b/src/Services/Flight/tests/UnitTest/Common/DbContextFactory.cs index c068f6f..50331a8 100644 --- a/src/Services/Flight/tests/UnitTest/Common/DbContextFactory.cs +++ b/src/Services/Flight/tests/UnitTest/Common/DbContextFactory.cs @@ -1,12 +1,8 @@ using System; using System.Collections.Generic; -using Flight.Aircrafts.Models; -using Flight.Airports.Models; using Flight.Data; using Flight.Flights.Enums; -using Flight.Flights.Models; using Flight.Seats.Enums; -using Flight.Seats.Models; using Microsoft.EntityFrameworkCore; namespace Unit.Test.Common @@ -18,7 +14,7 @@ namespace Unit.Test.Common var options = new DbContextOptionsBuilder() .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options; - var context = new FlightDbContext(options); + var context = new FlightDbContext(options, currentUserProvider: null); // Seed our data FlightDataSeeder(context); diff --git a/src/Services/Identity/src/Identity/Data/IdentityContext.cs b/src/Services/Identity/src/Identity/Data/IdentityContext.cs index 93f6afc..b0c5753 100644 --- a/src/Services/Identity/src/Identity/Data/IdentityContext.cs +++ b/src/Services/Identity/src/Identity/Data/IdentityContext.cs @@ -16,13 +16,12 @@ using Microsoft.EntityFrameworkCore.Storage; namespace Identity.Data; +using System; + public sealed class IdentityContext : IdentityDbContext, IDbContext { - private IDbContextTransaction _currentTransaction; - - public IdentityContext(DbContextOptions options, IHttpContextAccessor httpContextAccessor = default) : - base(options) + public IdentityContext(DbContextOptions options) : base(options) { } @@ -40,7 +39,8 @@ public sealed class IdentityContext : IdentityDbContext { - await using var transaction = await Database.BeginTransactionAsync(IsolationLevel.ReadCommitted, cancellationToken); + await using var transaction = + await Database.BeginTransactionAsync(IsolationLevel.ReadCommitted, cancellationToken); try { await SaveChangesAsync(cancellationToken); @@ -79,18 +79,25 @@ public sealed class IdentityContext : IdentityDbContext()) + try { - switch (entry.State) + foreach (var entry in ChangeTracker.Entries()) { - case EntityState.Modified: - entry.Entity.Version++; - break; + switch (entry.State) + { + case EntityState.Modified: + entry.Entity.Version++; + break; - case EntityState.Deleted: - entry.Entity.Version++; - break; + case EntityState.Deleted: + entry.Entity.Version++; + break; + } } } + catch (Exception ex) + { + throw new Exception("try for find IVersion", ex); + } } } diff --git a/src/Services/Identity/src/Identity/Extensions/Infrastructure/InfrastructureExtensions.cs b/src/Services/Identity/src/Identity/Extensions/Infrastructure/InfrastructureExtensions.cs index 09b286c..3b2a449 100644 --- a/src/Services/Identity/src/Identity/Extensions/Infrastructure/InfrastructureExtensions.cs +++ b/src/Services/Identity/src/Identity/Extensions/Infrastructure/InfrastructureExtensions.cs @@ -33,6 +33,7 @@ public static class InfrastructureExtensions var configuration = builder.Configuration; var env = builder.Environment; + builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); diff --git a/src/Services/Passenger/src/Passenger/Data/DesignTimeDbContextFactory.cs b/src/Services/Passenger/src/Passenger/Data/DesignTimeDbContextFactory.cs index d56404d..87860fb 100644 --- a/src/Services/Passenger/src/Passenger/Data/DesignTimeDbContextFactory.cs +++ b/src/Services/Passenger/src/Passenger/Data/DesignTimeDbContextFactory.cs @@ -11,6 +11,6 @@ public class DesignTimeDbContextFactory: IDesignTimeDbContextFactory options, - ICurrentUserProvider currentUserProvider = default) : + public PassengerDbContext(DbContextOptions options, ICurrentUserProvider currentUserProvider) : base(options, currentUserProvider) { }