From d3594926622b6498e8d44ec871ddabd85fbf9f34 Mon Sep 17 00:00:00 2001 From: Christopher Jolly Date: Mon, 16 Oct 2023 22:30:25 +0800 Subject: [PATCH] Use reflection so we don't have to reference Odbc or OleDb in main package --- src/EFCore.Jet/EFCore.Jet.csproj | 5 ----- .../Storage/Internal/JetDecimalTypeMapping.cs | 16 ++++++++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/EFCore.Jet/EFCore.Jet.csproj b/src/EFCore.Jet/EFCore.Jet.csproj index 485833e..ee2e6b5 100644 --- a/src/EFCore.Jet/EFCore.Jet.csproj +++ b/src/EFCore.Jet/EFCore.Jet.csproj @@ -44,11 +44,6 @@ - - - - - diff --git a/src/EFCore.Jet/Storage/Internal/JetDecimalTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetDecimalTypeMapping.cs index 7945adc..bc1f84d 100644 --- a/src/EFCore.Jet/Storage/Internal/JetDecimalTypeMapping.cs +++ b/src/EFCore.Jet/Storage/Internal/JetDecimalTypeMapping.cs @@ -1,7 +1,6 @@ using System.Data; using System.Data.Common; -using System.Data.Odbc; -using System.Data.OleDb; +using System.Linq; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Storage; @@ -83,13 +82,18 @@ namespace EntityFrameworkCore.Jet.Storage.Internal //Using Decimal is fine for OleDb but Odbc doesn't like it. //Have to use Numeric for Odbc. //Suspect this will also fix any formatting erros with , and . for decimal separator and space and , for digit separator - if (parameter is OdbcParameter odbcParameter) + //OdbcType.Numeric = 7; + //OleDbType.Numeric = 131; + var setodbctype = parameter.GetType().GetMethods().FirstOrDefault(x => x.Name == "set_OdbcType"); + var setoledbtype = parameter.GetType().GetMethods().FirstOrDefault(x => x.Name == "set_OleDbType"); + + if (setodbctype != null) { - odbcParameter.OdbcType = OdbcType.Numeric; + setodbctype.Invoke(parameter, new object?[] { 7 }); } - else if (parameter is OleDbParameter oleDbParameter) + else if (setoledbtype != null) { - oleDbParameter.OleDbType = OleDbType.Numeric; + setoledbtype.Invoke(parameter, new object?[] { 131 }); } if (Size.HasValue && Size.Value != -1)