Merge pull request #10592 from umbraco/v9/bugfix/sqlce-image-mapper-only-applied-for-sqlce
V9: SqlCeImageMapper only applied for SqlCe
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using NPoco;
|
||||
using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
@@ -12,17 +13,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
private readonly IDictionary<string, IEmbeddedDatabaseCreator> _embeddedDatabaseCreators;
|
||||
private readonly IDictionary<string, ISqlSyntaxProvider> _syntaxProviders;
|
||||
private readonly IDictionary<string, IBulkSqlInsertProvider> _bulkSqlInsertProviders;
|
||||
private readonly IDictionary<string, IProviderSpecificMapperFactory> _providerSpecificMapperFactories;
|
||||
|
||||
public DbProviderFactoryCreator(
|
||||
Func<string, DbProviderFactory> getFactory,
|
||||
IEnumerable<ISqlSyntaxProvider> syntaxProviders,
|
||||
IEnumerable<IBulkSqlInsertProvider> bulkSqlInsertProviders,
|
||||
IEnumerable<IEmbeddedDatabaseCreator> embeddedDatabaseCreators)
|
||||
IEnumerable<IEmbeddedDatabaseCreator> embeddedDatabaseCreators,
|
||||
IEnumerable<IProviderSpecificMapperFactory> providerSpecificMapperFactories)
|
||||
{
|
||||
_getFactory = getFactory;
|
||||
_embeddedDatabaseCreators = embeddedDatabaseCreators.ToDictionary(x=>x.ProviderName);
|
||||
_syntaxProviders = syntaxProviders.ToDictionary(x=>x.ProviderName);
|
||||
_bulkSqlInsertProviders = bulkSqlInsertProviders.ToDictionary(x=>x.ProviderName);
|
||||
_providerSpecificMapperFactories = providerSpecificMapperFactories.ToDictionary(x=>x.ProviderName);
|
||||
}
|
||||
|
||||
public DbProviderFactory CreateFactory(string providerName)
|
||||
@@ -61,5 +65,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
creator.Create();
|
||||
}
|
||||
}
|
||||
|
||||
public NPocoMapperCollection ProviderSpecificMappers(string providerName)
|
||||
{
|
||||
if(_providerSpecificMapperFactories.TryGetValue(providerName, out var mapperFactory))
|
||||
{
|
||||
return mapperFactory.Mappers;
|
||||
}
|
||||
|
||||
return new NPocoMapperCollection(Array.Empty<IMapper>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,5 +10,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
ISqlSyntaxProvider GetSqlSyntaxProvider(string providerName);
|
||||
IBulkSqlInsertProvider CreateBulkSqlInsertProvider(string providerName);
|
||||
void CreateDatabase(string providerName);
|
||||
NPocoMapperCollection ProviderSpecificMappers(string providerName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
{
|
||||
public interface IProviderSpecificMapperFactory
|
||||
{
|
||||
string ProviderName { get; }
|
||||
NPocoMapperCollection Mappers { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Data.Common;
|
||||
using Microsoft.Extensions.Options;
|
||||
using NPoco;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax;
|
||||
|
||||
@@ -51,5 +52,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
{
|
||||
throw new NotSupportedException("Embedded databases are not supported");
|
||||
}
|
||||
|
||||
public NPocoMapperCollection ProviderSpecificMappers(string providerName) => new NPocoMapperCollection(Array.Empty<IMapper>());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
private readonly DatabaseSchemaCreatorFactory _databaseSchemaCreatorFactory;
|
||||
private readonly RetryPolicy _connectionRetryPolicy;
|
||||
private readonly RetryPolicy _commandRetryPolicy;
|
||||
//private readonly IEnumerable<IMapper> _mapperCollection;
|
||||
private readonly IEnumerable<IMapper> _mapperCollection;
|
||||
private readonly Guid _instanceGuid = Guid.NewGuid();
|
||||
private List<CommandInfo> _commands;
|
||||
|
||||
@@ -51,8 +51,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
IBulkSqlInsertProvider bulkSqlInsertProvider,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
RetryPolicy connectionRetryPolicy = null,
|
||||
RetryPolicy commandRetryPolicy = null
|
||||
/*IEnumerable<IMapper> mapperCollection = null*/)
|
||||
RetryPolicy commandRetryPolicy = null,
|
||||
IEnumerable<IMapper> mapperCollection = null)
|
||||
: base(connectionString, sqlContext.DatabaseType, provider, sqlContext.SqlSyntax.DefaultIsolationLevel)
|
||||
{
|
||||
SqlContext = sqlContext;
|
||||
@@ -61,7 +61,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
_databaseSchemaCreatorFactory = databaseSchemaCreatorFactory;
|
||||
_connectionRetryPolicy = connectionRetryPolicy;
|
||||
_commandRetryPolicy = commandRetryPolicy;
|
||||
//_mapperCollection = mapperCollection;
|
||||
_mapperCollection = mapperCollection;
|
||||
Init();
|
||||
}
|
||||
|
||||
@@ -86,10 +86,10 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
{
|
||||
EnableSqlTrace = EnableSqlTraceDefault;
|
||||
NPocoDatabaseExtensions.ConfigureNPocoBulkExtensions();
|
||||
//if (_mapperCollection != null)
|
||||
//{
|
||||
// Mappers.AddRange(_mapperCollection);
|
||||
//}
|
||||
if (_mapperCollection != null)
|
||||
{
|
||||
Mappers.AddRange(_mapperCollection);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -280,6 +280,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
// add all registered mappers for NPoco
|
||||
_pocoMappers.AddRange(_npocoMappers);
|
||||
|
||||
_pocoMappers.AddRange(_dbProviderFactoryCreator.ProviderSpecificMappers(_providerName));
|
||||
|
||||
var factory = new FluentPocoDataFactory(GetPocoDataFactoryResolver);
|
||||
_pocoDataFactory = factory;
|
||||
var config = new FluentConfig(xmappers => factory);
|
||||
@@ -323,7 +325,9 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
_bulkSqlInsertProvider,
|
||||
_databaseSchemaCreatorFactory,
|
||||
_connectionRetryPolicy,
|
||||
_commandRetryPolicy);
|
||||
_commandRetryPolicy,
|
||||
_pocoMappers
|
||||
);
|
||||
|
||||
protected override void DisposeResources()
|
||||
{
|
||||
|
||||
11
src/Umbraco.Persistence.SqlCe/SqlCeSpecificMapperFactory.cs
Normal file
11
src/Umbraco.Persistence.SqlCe/SqlCeSpecificMapperFactory.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
|
||||
namespace Umbraco.Cms.Persistence.SqlCe
|
||||
{
|
||||
public class SqlCeSpecificMapperFactory : IProviderSpecificMapperFactory
|
||||
{
|
||||
public string ProviderName => Constants.DatabaseProviders.SqlCe;
|
||||
public NPocoMapperCollection Mappers => new NPocoMapperCollection(new[] {new SqlCeImageMapper()});
|
||||
}
|
||||
}
|
||||
@@ -145,7 +145,8 @@ namespace Umbraco.Extensions
|
||||
DbProviderFactories.GetFactory,
|
||||
factory.GetServices<ISqlSyntaxProvider>(),
|
||||
factory.GetServices<IBulkSqlInsertProvider>(),
|
||||
factory.GetServices<IEmbeddedDatabaseCreator>()
|
||||
factory.GetServices<IEmbeddedDatabaseCreator>(),
|
||||
factory.GetServices<IProviderSpecificMapperFactory>()
|
||||
));
|
||||
|
||||
builder.AddCoreInitialServices();
|
||||
@@ -351,14 +352,17 @@ namespace Umbraco.Extensions
|
||||
Type sqlCeSyntaxProviderType = umbSqlCeAssembly.GetType("Umbraco.Cms.Persistence.SqlCe.SqlCeSyntaxProvider");
|
||||
Type sqlCeBulkSqlInsertProviderType = umbSqlCeAssembly.GetType("Umbraco.Cms.Persistence.SqlCe.SqlCeBulkSqlInsertProvider");
|
||||
Type sqlCeEmbeddedDatabaseCreatorType = umbSqlCeAssembly.GetType("Umbraco.Cms.Persistence.SqlCe.SqlCeEmbeddedDatabaseCreator");
|
||||
Type sqlCeImageMapperType = umbSqlCeAssembly.GetType("Umbraco.Cms.Persistence.SqlCe.SqlCeImageMapper");
|
||||
Type sqlCeSpecificMapperFactory = umbSqlCeAssembly.GetType("Umbraco.Cms.Persistence.SqlCe.SqlCeSpecificMapperFactory");
|
||||
|
||||
if (!(sqlCeSyntaxProviderType is null || sqlCeBulkSqlInsertProviderType is null || sqlCeEmbeddedDatabaseCreatorType is null))
|
||||
if (!(sqlCeSyntaxProviderType is null
|
||||
|| sqlCeBulkSqlInsertProviderType is null
|
||||
|| sqlCeEmbeddedDatabaseCreatorType is null
|
||||
|| sqlCeSpecificMapperFactory is null))
|
||||
{
|
||||
builder.Services.AddSingleton(typeof(ISqlSyntaxProvider), sqlCeSyntaxProviderType);
|
||||
builder.Services.AddSingleton(typeof(IBulkSqlInsertProvider), sqlCeBulkSqlInsertProviderType);
|
||||
builder.Services.AddSingleton(typeof(IEmbeddedDatabaseCreator), sqlCeEmbeddedDatabaseCreatorType);
|
||||
builder.NPocoMappers().Add(sqlCeImageMapperType);
|
||||
builder.Services.AddSingleton(typeof(IProviderSpecificMapperFactory), sqlCeSpecificMapperFactory);
|
||||
}
|
||||
|
||||
var sqlCeAssembly = Assembly.LoadFrom(Path.Combine(binFolder, "System.Data.SqlServerCe.dll"));
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlServerCe;
|
||||
using Microsoft.Extensions.Options;
|
||||
using NPoco;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Infrastructure.Migrations.Install;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
@@ -57,5 +58,7 @@ namespace Umbraco.Web
|
||||
var engine = new SqlCeEngine(DatabaseBuilder.EmbeddedDatabaseConnectionString);
|
||||
engine.CreateDatabase();
|
||||
}
|
||||
|
||||
public NPocoMapperCollection ProviderSpecificMappers(string providerName) => new NPocoMapperCollection(Array.Empty<IMapper>());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user