Adds custom mapper for SqlCe for Image column, hopefully tests pass now.
This commit is contained in:
59
src/Umbraco.Core/Persistence/SqlCeImageMapper.cs
Normal file
59
src/Umbraco.Core/Persistence/SqlCeImageMapper.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user