Breaking changes
In this article you will find a list of breaking changes made between Umbraco 9 and 10.
The article is subject to change, the closer we get to the launch of Umbraco 10.
Update 'diff' from 3.5.0 to 5.0.0
The diff
library used in the Backoffice client has been updated and introduces a breaking change since the exposed global object has been renamed from JsDiff
to Diff
.
Content Schedule performance
Removes mutable ContentSchedule property from IContent/Content
to read/write
content schedules.
Use IContentService.GetContentScheduleByContentId && IContentService.PersistContentSchedule or the optional contentSchedule parameter on IContentService.Save instead.
Removed redundant event handling code
- Removed public methods:
PublishedSnapshotServiceEventHandler.Dispose
,PublishedSnapshotServiceEventHandler.Dispose(bool)
, and.PublishedSnapshotServiceEventHandler.Initialize
. - Removed public
ctor
.
Scope provider cleanup
Some public classes in the
Cms.Core.Services
namespace has moved assembly fromUmbraco.Cms.Infrastructure
toUmbraco.Cms.Core
.These same public classes have changed namespace from
Umbraco.Cms.Core.Services.Implement
toUmbraco.Cms.Core.Services
.
Update to NPoco5
NPoco types and interfaces are part of our public interface which means that this upgrade imposes breaking changes.
SQLite support
Removed support for Microsoft SQL Server Compact (SQL CE).
Removed
ReadLock
andWriteLock
methods fromISqlSyntaxProvider
interface. UseIDistributedLockingMechanism
(or IScope which delegates toIDistributedLockingMechanism
) instead.Constants for SQL Server provider name moved+consolidated from
Core.Constants.DatabaseProviders
andCore.Constants.-DbProviderNames
toUmbraco.Cms.Persistence.SqlServer.Constants
Various SQL Server related services moved from the
Umbraco.Infrastructure
project to the newUmbraco.Cms.Persistence
.SqlServer project with altered namespaces e.g.
SqlServerSyntaxProvider
,SqlServerBulkSqlInsertProvider
,SqlServerDatabaseCreator
.
Added the following methods/properties to ISqlSyntaxProvider. These must be implemented in any downstream implementation e.g:
ISqlSyntaxProvider.HandleCreateTable(IDatabase,TableDefinition,Boolean)
ISqlSyntaxProvider.GetFieldNameForUpdate()
ISqlSyntaxProvider.GetColumn(DatabaseType,String,String,String,String,Boolean)
ISqlSyntaxProvider.InsertForUpdateHint(Sql)
ISqlSyntaxProvider.AppendForUpdateHint(Sql)
ISqlSyntaxProvider.LeftJoinWithNestedJoin(Sql,Func<Sql,Sql>,String)
Update to ImageSharp v2
Update dependency versions:
SixLabors.ImageSharp
from 1.0.4 to 2.1.1SixLabors.ImageSharp.Web
from 1.0.5 to 2.0.0
Renamed CachedNameLength
property to CacheHashLength
on ImagingCacheSettings.
Moved ImageSharpImageUrlGenerator from project Umbraco.Infrastructure
to Umbraco.Web.Common
and updated the corresponding namespace and DI registration (from AddCoreInitialServices()
to AddUmbracoImageSharp()
);
Moved ImageSharp configuration from the AddUmbracoImageSharp()
extension method into separate IConfigureOptions<>
implementations:
The middleware is configured in ConfigureImageSharpMiddlewareOptions (which also replaces ImageSharpConfigurationOptions that previously only set the default ImageSharp configuration);
The default physical cache is configured in ConfigurePhysicalFileSystemCacheOptions.
Migrate Member properties to columns on the Member table
This is breaking because it is no longer possible to access the properties listed below through the IMember.Properties collection. You must now access them through their specific properties i.e. IMember.IsLockedOut.
umbracoMemberFailedPasswordAttempts
umbracoMemberApproved
umbracoMemberLockedOut
umbracoMemberLastLockoutDate
umbracoMemberLastLogin
umbracoMemberLastPasswordChangeDate
Additionally, when previously you resolved a Member as published content, all the default properties would be there twice. For instance, IsLockedOut
would be there both as a property with the alias umbracoMemberLockedOut
and with the alias IsLockedOut
. Now it'll only be there once, with the alias being the name of the property, so IsLockedOut
in this instance.
Lastly the nullable dates on a user, i.e. LastLoginLate
will now be null instead of DateTime.MinValue
when getting a user with the UserService.
Update examine to version 3
Examine 3 breaking changes:
ValueSet
immutable.ValueSetValidationResult
is renamed toValueSetValidationStatus
andValueSetValidationResult
is now a type.
Async support for content finders
bool TryFindContent(IPublishedRequestBuilder request);
Has changed to:
Task<bool> TryFindContent(IPublishedRequestBuilder request);
Improve redirect Content finder scalability
- Added more methods to
IRedirectUrlRepository
andIRedirectUrlService.cs
.
Fix Block List settings exception and optimize PVCs
- Added a new method on
IPublishedModelFactory
: TypeGetModelType(string? alias)
; - The generic types of a
BlockListItem<TContent
, TSettings>instance in the
BlockListModelreturned by
BlockListPropertyValueConverteris now determined by calling this new method, which can be different and cause a
ModelBindingException` in your views.
Async tree search
IEnumerable<SearchResultEntity?> Search(string query, int pageSize, long pageIndex, out long totalFound, string? searchFrom
= null)
Has changed to:
Task<EntitySearchResults> SearchAsync(string query, int pageSize, long pageIndex, string? searchFrom = null);
Moved StackQueue to correct namespace
StackQueue has been moved from Umbraco.Core.Collections
to the Umbraco.Cms.Core.Collections
namespace.
Globalsetting SqlWriteLockTimeOut has been removed
This setting has been superseeded by DistributedLockingWriteLockDefaultTimeout
.