Adds custom mapper for SqlCe for Image column, hopefully tests pass now.

This commit is contained in:
Shannon
2020-07-06 16:25:15 +10:00
parent a634c0b835
commit 1280235dcf
4 changed files with 72 additions and 7 deletions

View File

@@ -0,0 +1,59 @@
using System;
using System.Data;
using System.Data.Common;
using System.Data.SqlServerCe;
using System.Linq;
using System.Reflection;
using NPoco;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Persistence
{
/// <summary>
/// Custom NPoco mapper for SqlCe
/// </summary>
/// <remarks>
/// Work arounds to handle special columns
/// </remarks>
internal class SqlCeImageMapper : DefaultMapper
{
public override Func<object, object> GetToDbConverter(Type destType, MemberInfo sourceMemberInfo)
{
if (sourceMemberInfo.GetMemberInfoType() == typeof(byte[]))
{
return x =>
{
var pd = Current.SqlContext.PocoDataFactory.ForType(sourceMemberInfo.DeclaringType);
if (pd == null) return null;
var col = pd.AllColumns.FirstOrDefault(x => x.MemberInfoData.MemberInfo == sourceMemberInfo);
if (col == null) return null;
return new SqlCeParameter
{
SqlDbType = SqlDbType.Image,
Value = x ?? Array.Empty<byte>()
};
};
}
return base.GetToDbConverter(destType, sourceMemberInfo);
}
public override Func<object, object> GetParameterConverter(DbCommand dbCommand, Type sourceType)
{
if (sourceType == typeof(byte[]))
{
return x =>
{
var param = new SqlCeParameter
{
SqlDbType = SqlDbType.Image,
Value = x
};
return param;
};
}
return base.GetParameterConverter(dbCommand, sourceType);
}
}
}

View File

@@ -10,6 +10,7 @@ using Umbraco.Core.Persistence.FaultHandling;
namespace Umbraco.Core.Persistence
{
/// <summary>
/// Extends NPoco Database for Umbraco.
/// </summary>
@@ -38,14 +39,10 @@ namespace Umbraco.Core.Persistence
: base(connectionString, sqlContext.DatabaseType, provider, sqlContext.SqlSyntax.DefaultIsolationLevel)
{
SqlContext = sqlContext;
_logger = logger;
_connectionRetryPolicy = connectionRetryPolicy;
_commandRetryPolicy = commandRetryPolicy;
EnableSqlTrace = EnableSqlTraceDefault;
NPocoDatabaseExtensions.ConfigureNPocoBulkExtensions();
Init();
}
/// <summary>
@@ -57,10 +54,17 @@ namespace Umbraco.Core.Persistence
{
SqlContext = sqlContext;
_logger = logger;
Init();
}
private void Init()
{
EnableSqlTrace = EnableSqlTraceDefault;
NPocoDatabaseExtensions.ConfigureNPocoBulkExtensions();
if (SqlContext.DatabaseType == DatabaseType.SQLCe)
{
Mappers.Add(new SqlCeImageMapper());
}
}
#endregion
@@ -257,5 +261,6 @@ namespace Umbraco.Core.Persistence
}
#endregion
}
}

View File

@@ -140,6 +140,7 @@
<Compile Include="Models\RelationTypeExtensions.cs" />
<Compile Include="Persistence\Repositories\IInstallationRepository.cs" />
<Compile Include="Persistence\Repositories\Implement\InstallationRepository.cs" />
<Compile Include="Persistence\SqlCeImageMapper.cs" />
<Compile Include="Serialization\AutoInterningStringConverter.cs" />
<Compile Include="Serialization\AutoInterningStringKeyCaseInsensitiveDictionaryConverter.cs" />
<Compile Include="Services\Implement\InstallationService.cs" />

View File

@@ -1325,7 +1325,7 @@ namespace Umbraco.Web.PublishedCache.NuCache
"SET data=@data, dataRaw=@dataRaw, rv=rv+1 WHERE nodeId=@id AND published=@published",
new
{
dataRaw = dto.RawData,
dataRaw = dto.RawData ?? Array.Empty<byte>(),
data = dto.Data,
id = dto.NodeId,
published = dto.Published