From c868c60ed24b576ff656713cde6e3524b6b7ec6f Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:26:06 +0100 Subject: [PATCH] V11: Fix decimal variants (#13741) * fix sqlite with variants * Create and register SqlSpecificMapper * Delete obsolete file * Add back inheritance Co-authored-by: Zeegaan --- .../SqlServerSpecificMapperFactory.cs | 11 +++++++ .../UmbracoBuilderExtensions.cs | 2 ++ .../Mappers/SqlitePocoGuidMapper.cs | 19 ++++++++++++ .../Mapping/UmbracoDefaultMapper.cs | 30 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerSpecificMapperFactory.cs create mode 100644 src/Umbraco.Infrastructure/Mapping/UmbracoDefaultMapper.cs diff --git a/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerSpecificMapperFactory.cs b/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerSpecificMapperFactory.cs new file mode 100644 index 0000000000..1943aa251a --- /dev/null +++ b/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerSpecificMapperFactory.cs @@ -0,0 +1,11 @@ +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Infrastructure.Persistence; + +namespace Umbraco.Cms.Persistence.SqlServer.Services; + +public class SqlServerSpecificMapperFactory : IProviderSpecificMapperFactory +{ + public string ProviderName => Constants.ProviderName; + + public NPocoMapperCollection Mappers => new(() => new[] { new UmbracoDefaultMapper() }); +} diff --git a/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs b/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs index aa4743faf8..abe893180a 100644 --- a/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs @@ -22,6 +22,8 @@ public static class UmbracoBuilderExtensions /// public static IUmbracoBuilder AddUmbracoSqlServerSupport(this IUmbracoBuilder builder) { + builder.Services.TryAddEnumerable(ServiceDescriptor + .Singleton()); builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton()); builder.Services.TryAddEnumerable(ServiceDescriptor .Singleton()); diff --git a/src/Umbraco.Cms.Persistence.Sqlite/Mappers/SqlitePocoGuidMapper.cs b/src/Umbraco.Cms.Persistence.Sqlite/Mappers/SqlitePocoGuidMapper.cs index 930478e453..ab62b4b1d1 100644 --- a/src/Umbraco.Cms.Persistence.Sqlite/Mappers/SqlitePocoGuidMapper.cs +++ b/src/Umbraco.Cms.Persistence.Sqlite/Mappers/SqlitePocoGuidMapper.cs @@ -1,3 +1,4 @@ +using System.Globalization; using NPoco; namespace Umbraco.Cms.Persistence.Sqlite.Mappers; @@ -28,6 +29,24 @@ public class SqlitePocoGuidMapper : DefaultMapper }; } + if (destType == typeof(decimal)) + { + return value => + { + var result = Convert.ToDecimal(value, CultureInfo.InvariantCulture); + return result; + }; + } + + if (destType == typeof(decimal?)) + { + return value => + { + var result = Convert.ToDecimal(value, CultureInfo.InvariantCulture); + return result; + }; + } + return base.GetFromDbConverter(destType, sourceType); } } diff --git a/src/Umbraco.Infrastructure/Mapping/UmbracoDefaultMapper.cs b/src/Umbraco.Infrastructure/Mapping/UmbracoDefaultMapper.cs new file mode 100644 index 0000000000..986bb19d39 --- /dev/null +++ b/src/Umbraco.Infrastructure/Mapping/UmbracoDefaultMapper.cs @@ -0,0 +1,30 @@ +using System.Globalization; +using NPoco; + +namespace Umbraco.Cms.Core.Mapping; + +public class UmbracoDefaultMapper : DefaultMapper +{ + public override Func GetFromDbConverter(Type destType, Type sourceType) + { + if (destType == typeof(decimal)) + { + return value => + { + var result = Convert.ToDecimal(value, CultureInfo.InvariantCulture); + return result; + }; + } + + if (destType == typeof(decimal?)) + { + return value => + { + var result = Convert.ToDecimal(value, CultureInfo.InvariantCulture); + return result; + }; + } + + return base.GetFromDbConverter(destType, sourceType); + } +}