From 1dbe90d0209b3c1e5190013102b4e1f6cb4e3340 Mon Sep 17 00:00:00 2001 From: masoud Date: Sun, 7 Dec 2025 21:21:47 +0000 Subject: [PATCH] fix: Use EnsureCreatedAsync instead of MigrateAsync for initial db setup - EnsureCreatedAsync creates db only if it doesn't exist - Returns false if db already exists (idempotent) - Prevents 'CMS.mdf already exists' error - Still applies pending migrations when needed --- .../ApplicationDbContextInitialiser.cs | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs b/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs index fda1569..4b1b1d8 100644 --- a/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs +++ b/src/CMSMicroservice.Infrastructure/Persistence/ApplicationDbContextInitialiser.cs @@ -23,28 +23,24 @@ public class ApplicationDbContextInitialiser { if (_context.Database.IsSqlServer()) { - // Check if database already exists and has pending migrations - bool dbExists = await _context.Database.CanConnectAsync(); + // Use EnsureCreated for initial setup, then apply migrations + // EnsureCreated is idempotent - safe to call multiple times + var created = await _context.Database.EnsureCreatedAsync(); - if (dbExists) + if (!created) { - _logger.LogInformation("Database exists, checking for pending migrations..."); - var pendingMigrations = await _context.Database.GetPendingMigrationsAsync(); - - if (pendingMigrations.Any()) + // Database exists, check for pending migrations + _logger.LogInformation("Database already exists, checking for migrations..."); + var pending = await _context.Database.GetPendingMigrationsAsync(); + if (pending.Any()) { - _logger.LogInformation("Applying {Count} pending migrations", pendingMigrations.Count()); + _logger.LogInformation("Applying {Count} pending migrations", pending.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(); + _logger.LogInformation("Database created successfully"); } } }