public IConfiguration Merge(IConfiguration configuration) { var mergedConfig = new DefaultConfiguration(); mergedConfig.SetAuditLogProvider(_auditLogProvider ?? configuration.AuditLogProvider); mergedConfig.SetDefaultChangeTrackingMode(_defaultChangeTrackingMode.HasValue ? _defaultChangeTrackingMode.Value : configuration.DefaultChangeTrackingMode); mergedConfig.SetDefaultConnectionName(_defaultConnectionName ?? configuration.DefaultConnectionName); mergedConfig.SetDefaultFetchMode(_defaultFetchMode.HasValue ? _defaultFetchMode.Value : configuration.DefaultFetchMode); mergedConfig.SetDefaultL1CacheRepresentation(_defaultL1CacheRepresentation.HasValue ? _defaultL1CacheRepresentation.Value : configuration.DefaultL1CacheRepresentation); mergedConfig.SetDefaultMaterializationMode(_defaultMaterializationMode.HasValue ? _defaultMaterializationMode.Value : configuration.DefaultMaterializationMode); mergedConfig.SetDefaultSerializationMode(_defaultSerializationMode.HasValue ? _defaultSerializationMode.Value : configuration.DefaultSerializationMode); mergedConfig.SetExecutionContext(_executionContext ?? configuration.ExecutionContext); mergedConfig.SetGenerateDeleteSql(GenerateDeleteSql || configuration.GenerateDeleteSql); mergedConfig.SetGenerateInsertSql(GenerateInsertSql || configuration.GenerateInsertSql); mergedConfig.SetGenerateUpdateSql(GenerateUpdateSql || configuration.GenerateUpdateSql); mergedConfig.SetLogging(Logging || configuration.Logging); mergedConfig.SetOperationNamingConvention(_operationNamingConvention.HasValue ? _operationNamingConvention.Value : configuration.OperationNamingConvention); mergedConfig.SetOperationPrefix(_operationPrefix ?? configuration.OperationPrefix); return mergedConfig; }