From 8b264e0767c597a096dc7f948cc8d75895449783 Mon Sep 17 00:00:00 2001 From: Unai Zorrilla Castro Date: Thu, 2 Nov 2017 15:03:32 +0100 Subject: [PATCH] Review MigrateDbContext to add retry for network-related exception when sql server container is created --- .../WebHost.Customization.csproj | 1 + .../WebHostExtensions.cs | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj index d9ddd56e9..db3926d0d 100644 --- a/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj +++ b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj @@ -6,6 +6,7 @@ + diff --git a/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs index ecaceeab0..858506e46 100644 --- a/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs +++ b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs @@ -1,7 +1,10 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Polly; +using Polly.Retry; using System; +using System.Data.SqlClient; namespace Microsoft.AspNetCore.Hosting { @@ -21,10 +24,26 @@ namespace Microsoft.AspNetCore.Hosting { logger.LogInformation($"Migrating database associated with context {typeof(TContext).Name}"); - context.Database + var retry = Policy.Handle() + .WaitAndRetry(new TimeSpan[] + { + TimeSpan.FromSeconds(5), + TimeSpan.FromSeconds(10), + TimeSpan.FromSeconds(15), + }); + + retry.Execute(() => + { + //if the sql server container is not created on run docker compose this + //migration can't fail for network related exception. The retry options for DbContext only + //apply to transient exceptions. + + context.Database .Migrate(); - seeder(context,services); + seeder(context, services); + }); + logger.LogInformation($"Migrated database associated with context {typeof(TContext).Name}"); }