Fix using decimal and Int64 in parameters

pull/158/head
Christopher Jolly 2 years ago
parent 0d36ea7cb2
commit 8c64a29730

@ -44,6 +44,11 @@
<PackageReference Include="System.Collections.Immutable" /> <PackageReference Include="System.Collections.Immutable" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="System.Data.Odbc" />
<PackageReference Include="System.Data.OleDb" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\EFCore.Jet.Data\EFCore.Jet.Data.csproj" /> <ProjectReference Include="..\EFCore.Jet.Data\EFCore.Jet.Data.csproj" />
</ItemGroup> </ItemGroup>

@ -1,5 +1,7 @@
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc;
using System.Data.OleDb;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
@ -77,7 +79,18 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
protected override void ConfigureParameter(DbParameter parameter) protected override void ConfigureParameter(DbParameter parameter)
{ {
base.ConfigureParameter(parameter); base.ConfigureParameter(parameter);
//Decimals needs to be mapped to Numeric for Jet.
//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)
{
odbcParameter.OdbcType = OdbcType.Numeric;
}
else if (parameter is OleDbParameter oleDbParameter)
{
oleDbParameter.OleDbType = OleDbType.Numeric;
}
if (Size.HasValue if (Size.HasValue
&& Size.Value != -1) && Size.Value != -1)
{ {

@ -1,5 +1,6 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using System.Data.Common;
namespace EntityFrameworkCore.Jet.Storage.Internal namespace EntityFrameworkCore.Jet.Storage.Internal
{ {
@ -17,5 +18,14 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters) protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters)
=> new JetLongTypeMapping(parameters); => new JetLongTypeMapping(parameters);
protected override void ConfigureParameter(DbParameter parameter)
{
base.ConfigureParameter(parameter);
//Needs to be Object. Using BigInt doesn't always work
//If the argument value is a long and within Int32 range, having it as BigInt in x86 works
//When running in x64 it fails to convert. Using Object bypasses the conversion
parameter.DbType = System.Data.DbType.Object;
}
} }
} }

@ -165,7 +165,7 @@ WHERE `c`.`City` = @__city_0
AssertSql( AssertSql(
""" """
@__p_0='2' (Nullable = true) @__p_0='2' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -173,7 +173,7 @@ WHERE `c`.`City` = @__city_0
""", """,
// //
""" """
@__p_0='5' (Nullable = true) @__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -187,7 +187,7 @@ WHERE `c`.`City` = @__city_0
AssertSql( AssertSql(
""" """
@__p_0='1' (Nullable = true) @__p_0='1' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -195,7 +195,7 @@ WHERE `c`.`City` = @__city_0
""", """,
// //
""" """
@__p_0='5' (Nullable = true) @__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -407,7 +407,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
AssertSql( AssertSql(
""" """
@__p_0='2' (Nullable = true) @__p_0='2' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -415,7 +415,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
""", """,
// //
""" """
@__p_0='5' (Nullable = true) @__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -441,7 +441,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
""", """,
// //
""" """
@__p_0='5' (Nullable = true) @__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`
@ -449,7 +449,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
""", """,
// //
""" """
@__p_0='2' (Nullable = true) @__p_0='2' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e` FROM `Employees` AS `e`

Loading…
Cancel
Save