From d0cd22b09d3e303d84f7155c0f398599bfc8ab06 Mon Sep 17 00:00:00 2001 From: Andreas Zerbst <73799582+andr317c@users.noreply.github.com> Date: Tue, 14 Nov 2023 20:38:18 +0100 Subject: [PATCH] V12 Bugfix, Added compare provider name extension for Sqlite (#15189) * Created an extension for comparing the current and the outdated providerName for Sqlite * Added usages for the CompareProviderNames * Added another case if the providerName is the outdated SQLite * Both cases use Sqlite, so there is no need to have duplicate code --- .../EfCoreMigrationExecutor.cs | 5 ++--- ...mbracoEFCoreServiceCollectionExtensions.cs | 1 + .../StringExtensions.cs | 21 +++++++++++++++++++ .../UmbracoDbContext.cs | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Cms.Persistence.EFCore/StringExtensions.cs diff --git a/src/Umbraco.Cms.Persistence.EFCore/EfCoreMigrationExecutor.cs b/src/Umbraco.Cms.Persistence.EFCore/EfCoreMigrationExecutor.cs index 8de8e1f1b8..d50b8b1bf5 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/EfCoreMigrationExecutor.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/EfCoreMigrationExecutor.cs @@ -21,7 +21,7 @@ public class EfCoreMigrationExecutor : IEFCoreMigrationExecutor public async Task ExecuteSingleMigrationAsync(EFCoreMigration migration) { - IMigrationProvider? provider = _migrationProviders.FirstOrDefault(x => x.ProviderName == _options.Value.ProviderName); + IMigrationProvider? provider = _migrationProviders.FirstOrDefault(x => x.ProviderName.CompareProviderNames(_options.Value.ProviderName)); if (provider is not null) { @@ -31,8 +31,7 @@ public class EfCoreMigrationExecutor : IEFCoreMigrationExecutor public async Task ExecuteAllMigrationsAsync() { - IMigrationProvider? provider = _migrationProviders.FirstOrDefault(x => x.ProviderName == _options.Value.ProviderName); - + IMigrationProvider? provider = _migrationProviders.FirstOrDefault(x => x.ProviderName.CompareProviderNames(_options.Value.ProviderName)); if (provider is not null) { await provider.MigrateAllAsync(); diff --git a/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs b/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs index d901088064..3d7e01a0ad 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs @@ -136,6 +136,7 @@ public static class UmbracoEFCoreServiceCollectionExtensions builder.UseSqlServer(connectionString); break; case Constants.ProviderNames.SQLLite: + case "Microsoft.Data.SQLite": builder.UseSqlite(connectionString); break; default: diff --git a/src/Umbraco.Cms.Persistence.EFCore/StringExtensions.cs b/src/Umbraco.Cms.Persistence.EFCore/StringExtensions.cs new file mode 100644 index 0000000000..8b680a08b1 --- /dev/null +++ b/src/Umbraco.Cms.Persistence.EFCore/StringExtensions.cs @@ -0,0 +1,21 @@ +using Umbraco.Cms.Core; + +namespace Umbraco.Cms.Persistence.EFCore; + +internal static class StringExtensions +{ + internal static bool CompareProviderNames(this string connectionProvider, string? compareString) + { + if (compareString is null) + { + return false; + } + + if (connectionProvider == compareString) + { + return true; + } + + return connectionProvider is "Microsoft.Data.SQLite" or Constants.ProviderNames.SQLLite && compareString is "Microsoft.Data.SQLite" or Constants.ProviderNames.SQLLite; + } +} diff --git a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs index 60e519de4c..a27630bd34 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs @@ -58,7 +58,7 @@ public class UmbracoDbContext : DbContext } IEnumerable migrationProviders = StaticServiceProvider.Instance.GetServices(); - IMigrationProviderSetup? migrationProvider = migrationProviders.FirstOrDefault(x => x.ProviderName == connectionStrings.ProviderName); + IMigrationProviderSetup? migrationProvider = migrationProviders.FirstOrDefault(x => x.ProviderName.CompareProviderNames(connectionStrings.ProviderName)); if (migrationProvider == null && connectionStrings.ProviderName != null) {