From 25f8685320bd45fb065c5cb5170561bfa2513828 Mon Sep 17 00:00:00 2001 From: Lau Date: Mon, 20 Jan 2020 14:36:03 +0100 Subject: [PATCH] Use `DbConnectionStringBuilder` instead of its OleDb equivalent. Introduce some helper extension methods to access well defined OleDb properties, that `DbConnectionStringBuilder` knows nothing about. --- .../Migrations/JetMigrationsSqlGenerator.cs | 13 ++++++++----- .../DbConnectionStringBuilderExtensions.cs | 17 +++++++++++++++++ src/System.Data.Jet/JetProviderFactory.cs | 4 +--- src/System.Data.Jet/System.Data.Jet.csproj | 1 + 4 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs diff --git a/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs b/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs index 1c40c7c..6798c9c 100644 --- a/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs +++ b/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.Data.Jet; -using System.Data.OleDb; using System.IO; using System.Linq; using System.Text.RegularExpressions; @@ -454,10 +453,14 @@ namespace EntityFrameworkCore.Jet.Migrations Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); - var connectionStringBuilder = new OleDbConnectionStringBuilder(_options.ConnectionString); - var provider = string.IsNullOrEmpty(connectionStringBuilder.Provider) - ? JetConfiguration.OleDbDefaultProvider - : connectionStringBuilder.Provider; + var connectionStringBuilder = JetProviderFactory.Instance.CreateConnectionStringBuilder(); + connectionStringBuilder.ConnectionString = _options.ConnectionString; + + var provider = connectionStringBuilder.GetProvider(); + if (string.IsNullOrEmpty(provider)) + { + provider = JetConfiguration.OleDbDefaultProvider; + } builder .Append("CREATE DATABASE ") diff --git a/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs b/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs new file mode 100644 index 0000000..2774245 --- /dev/null +++ b/src/System.Data.Jet/DbConnectionStringBuilderExtensions.cs @@ -0,0 +1,17 @@ +using System.Data.Common; + +namespace System.Data.Jet +{ + public static class DbConnectionStringBuilderExtensions + { + private const string ProviderKey = "Provider"; + + public static string GetProvider(this DbConnectionStringBuilder source) + => source.TryGetValue(ProviderKey, out var providerName) + ? providerName as string + : null; + + public static void SetProvider(this DbConnectionStringBuilder source, string value) + => source[ProviderKey] = value; + } +} \ No newline at end of file diff --git a/src/System.Data.Jet/JetProviderFactory.cs b/src/System.Data.Jet/JetProviderFactory.cs index 50d00a5..f07f5d9 100644 --- a/src/System.Data.Jet/JetProviderFactory.cs +++ b/src/System.Data.Jet/JetProviderFactory.cs @@ -66,9 +66,7 @@ namespace System.Data.Jet /// public override DbConnectionStringBuilder CreateConnectionStringBuilder() { - OleDbConnectionStringBuilder oleDbConnectionStringBuilder = new OleDbConnectionStringBuilder(); - - return oleDbConnectionStringBuilder; + return new OleDbConnectionStringBuilder(); } /// diff --git a/src/System.Data.Jet/System.Data.Jet.csproj b/src/System.Data.Jet/System.Data.Jet.csproj index 10bd780..58c883a 100644 --- a/src/System.Data.Jet/System.Data.Jet.csproj +++ b/src/System.Data.Jet/System.Data.Jet.csproj @@ -97,6 +97,7 @@ +