From 7ec9c4077c36ef9dd134b0ea0b64221036a767f2 Mon Sep 17 00:00:00 2001 From: masoud Date: Sun, 7 Dec 2025 21:16:49 +0000 Subject: [PATCH] fix: Improve database migration strategy - only migrate if needed - Check if database exists before creating - Only apply pending migrations - Skip migration if database is up to date - Prevents 'file already exists' error on restart --- .../ApplicationDbContextInitialiser.cs | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs b/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs index 03d4c16..fda1569 100644 --- a/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs +++ b/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs @@ -23,7 +23,29 @@ public class ApplicationDbContextInitialiser { if (_context.Database.IsSqlServer()) { - await _context.Database.MigrateAsync(); + // Check if database already exists and has pending migrations + bool dbExists = await _context.Database.CanConnectAsync(); + + if (dbExists) + { + _logger.LogInformation("Database exists, checking for pending migrations..."); + var pendingMigrations = await _context.Database.GetPendingMigrationsAsync(); + + if (pendingMigrations.Any()) + { + _logger.LogInformation("Applying {Count} pending migrations", pendingMigrations.Count()); + await _context.Database.MigrateAsync(); + } + else + { + _logger.LogInformation("Database is up to date, no migrations needed"); + } + } + else + { + _logger.LogInformation("Database does not exist, creating and migrating..."); + await _context.Database.MigrateAsync(); + } } } catch (Exception ex) @@ -32,7 +54,6 @@ public class ApplicationDbContextInitialiser throw; } } - public async Task SeedAsync() { try