Breaking Changes Overview for 2sxc/EAV
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
👉 please also read about the Deprecation Policy
Breaking Changes in EAV and 2sxc v18
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
ATM no breaking changes in v18
Breaking Changes in EAV and 2sxc v17
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
Minor breaking changes which probably won't affect you, unless you're using some very advanced features.
v17.00
ToSic.Eav.App.AppData
is renamed toToSic.Eav.Apps.DataSources.AppDataWithCrud
- In Typed mode, the
App.Data
now has a different interfaceToSic.Sxc.Apps.IAppDataTyped
AppState
changes...App
object had a hiddenAppState
property which was never documented and is now removed.
If you were using it, then probably to accessGetContentType(string)
. You can find a replacement onApp.Data.GetContentType(...)
.
Shortlink: https://go.2sxc.org/brc-17
Breaking Changes in EAV and 2sxc v16
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
V16.00 doesn't have breaking changes; 16.02 has some very minor breaking changes
Breaking Changes in 2sxc 16.02
API Changes which affect you if you had installed v16.01 with the latest Blog or Mobius
In v16.01 we had introduced a new Typed API, which turned out to be not good-enough.
This meant we had to rollback some of the changes we had introduced there,
API Changes which should really not affect you
- Various APIs which used to return an
IHybridHtmlString
now return anIRawHtml
This is to sync types with RazorBlade. It should have no effect on any code out there, as the result type is usuallydynamic
- Renamed the type
ToSic.Sxc.Data.IDynamicMetadata
toToSic.Sxc.Data.IMetadata
This is technically a breaking change, but the type name should never have been used in any razor code, so it shouldn't affect anybody. - Renamed
ToSic.Sxc.Data.IDynamicField
toToSic.Sxc.Data.IField
This is technically a breaking change, but the type name should never have been used in any razor code, so it shouldn't affect anybody.
Breaking Changes in 2sxc 16.03
API Changes which affect you if you had installed v16.01/16.02 with the latest Blog or Mobius
- Base classes were renamed because of confusing ...Pro suffix. RazorPro is now RazorTyped, ApiPro is ApiTyped and CodePro is CodeTyped #3147
- Now by default, all access to a property like .String("SomeName") will throw an error in required mode if the field doesn't exist #3138
- The .Parents(...) was enhanced to require named parameters (see blog post) #3139
Breaking Changes in EAV and 2sxc v15
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
V13 did some clean-up. It will rarely affect you, but if you are using the TimelineJs App it will.
Breaking Changes in 2sxc 15.00
Tip
In summary we've made a lot of internal breaking changes. But for all normal users it will have no effect at all.
We believe it will only affect you in these scenarios:
- If you have a custom DataSource, you will need to make some minor changes and recompile them
- If you used special, non-public Logging APIs you would need to update your work
- If you used any undocumented APIs, you will need to check if everything still works
API Changes that may affect you
- DataSource base class was completely refactored
see instructions - Old static
ToSic.Eav.DataSource
was removed (deprecated since v13) - Internal logging API
ILog
was completely refactored
see instructions - Internal object wrappers were completely refactored
see instructions - TinyMCE Upgrade to v6
- Database changes
- Minor API changes
Breaking Updates which probably don't affect anybody
- SQL changes - minor updates to the Database
- Internal APIs which were removed
- Static
ToSic.Eav.Data.Builder.AttribBuilder.AddValue(...)
- Static
Breaking Changes in 2sxc 15.03
Tip
In summary we've made a lot of internal breaking changes. But for all normal users it will have no effect at all.
We believe it will only affect you in these scenarios:
- TODO
API Changes that may affect you
- An internal user property
IUser.IsDesigner
was renamed toIUser.IsSiteDeveloper
- An internal, deprecated user property
IUser.IsAdmin
was removed - An internal, deprecated user property
IUser.IsSuperUser
was removed - An internal property
IUser.Guid
was changed fromGuid?
toGuid
- The
Users
DataSource had a property calledIncludeSystemAdmins
which was changed frombool
tostring
to allow for more options - The
Users
DataSource had a property calledRoleIds
which returned a non-standard string-array. It has been removed, and the newRoles
returns standard related entities. - Removed static
ToSic.Eav.Data.Build.Entity(...)
method which was deprecated in v12
API Changes which should really not affect you
These are internal APIs which we changed to make everything more immutable. They should never have been in use outside of the internal code.
- Changed
IValue.Languages
fromIList
toIEnumerable
and made it immutable - Change
IEntity.Attributes
fromDictionary<string, IAttribute>
toIImmutableDictionary<string, IAttribute>
as a step to later make it immutable - Removed some old, probably never used APIs on
IAttribute<T>
such asIAttribute<T>[int[] languageIDs]
IAttribute<T>[string]
IAttribute<T>[string[]]
IAttribute[string[] languageKeys]
- was always marked as private
- Changed the type of
Attribute.Type
from string toValueTypes
to make it more strong-typed - Removed the property
Attribute.ControlledType
which previously contained the ValueType
Breaking Changes in 2sxc 15.06
Tip
In summary we've made a lot of internal breaking changes. But for all normal users it will have no effect at all.
We believe it will only affect you in these scenarios:
- TODO
API Changes that may affect you on IEntity
These were internal APIs which were not publicly documented, but may have been used by some developers.
IEntity.GetDraft()
was removed to ensure the entity is immutableIEntity.GetPublished()
was removed to ensure the entity is immutable
Note: GetDraft()
and GetPublished()
are still available on DynamicEntity in Razor and WebApi.
They were only removed on IEntity
.
Renamed DataSources
These data sources had uncommon names, and were renamed to be more consistent. We believe that they were only used in VisualQuery and not in code, so it should not affect you.
CsvDataSource
is nowCsv
SerializationConfiguration
is nowSerialization
Breaking Changes in EAV and 2sxc v14
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
V14 did some clean-up of internal APIs, but otherwise there are no known breaking changes.
Note that these changes could be seen as a breaking change for certain users:
Breaking Changes in EAV and 2sxc v13
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
V13 did some clean-up. It will rarely affect you, but if you are using the TimelineJs App it will.
Breaking Changes in 2sxc 13.00
API Changes that may affect you
An old, non-DI feature for Inner Content is being deprecated and will be removed in v14
see instructionsAn old feature for publishing module InstanceData as JSON is removed
see instructionsAn old feature to create DataSources is removed
see instructionsTwo old data-conversion features DataToDictionary and EntitiesToDictionary were removed
see instructionsSome internal functionality which enabled
IEntity
objects to convert links containingfile:...
andpage:...
has been removed. This only affects special deep code calls onIEntity
and does _not affectDynamicEntity
objects in Razor see instructionsThe old feature
Eav.Factory.Resolve<T>()
was deprecated and will be removed in v14
see instructionsThe old feature
BlockDataSource.Cache.GetContentType(...)
was removed see instructionsThe Dnn Static
ToSic.Sxc.Dnn.Factory
is being deprecated and will be removed in v14 see instructions
Major Updates with may affect you
- The Image Resizer is being replaced with ImageFlow
- The App containing Site-wide settings is changed to
Primary
- previously it used theContent
app for this. We believe this won't affect many users, as the settings-stack is still very new in v12
Things which probably don't affect anybody
- SQL changes - minor updates to the Database
- .net Framework and Dll Updated to Match Dnn 9 Requirements - but still works in Dnn 7.4.2
- .net Framework 4.7.2 now required (previously .net Framework 4.5.1)
- .net Standard 2.0.3 required (previously .net Standard 1.6)
Important: This will be referenced in theweb.config
upon installation - Dependency Injection updated to .net core 2.1.1 (previously 1.1)
- Newtonsoft.Json updated to v10.0.3
- Entity Framework updated to 2.1.1 (previously 1.1) - Oqtane is unmodified and uses 3.1.4
- Dnn DLLs renamed
ToSic.Sxc.Dnn.dll
becameToSic.Sxc.Dnn.Core.dll
for consistencyToSic.SexyContent.WebApi.dll
becameToSic.Sxc.Dnn.WebApi.dll
ToSic.SexyContent.Razor.dll
becameToSic.Sxc.Dnn.Razor.dll
- An internal object
ToSic.Eav.Apps.State
was removed
Internal APIs which were removed
- Static
ToSic.Eav.Data.Builder.AttribBuilder.AddValue(...)
Breaking Changes in EAV and 2sxc v12
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
V12 did a lot of internal rework to get it to run on Oqtane. Almost none of the changes will affect you.
Breaking Change Version 12.10
- Jquery is completely removed. This shouldn't affect your code, since all old code usually runs in DNN where jQuery is included by default.
Breaking Change Version 12.05
V12 adds new properties to Razor and WebAPI which could result in some surprises: Path
, Convert
, Settings
, Resources
and DevTools
.
Especially the new Path
and Convert
could clash with existing code which had @using System
or @using System.IO
so the code would just read Path.GetFileName(...)
or something.
Because of this, we only give the latest classes Custom.Dnn.Razor12
, Custom.Dnn.Code12
, Custom.Hybrid.Razor12
, Custom.Hybrid.Api12
etc. these properties.
This means that previous base classes do not have these by design, and we encourage you to move to these latest base classes.
Important: 2sxc 12.00 - 12.04 also had some of these properties on
ToSic.Sxc.Dnn.RazorComponent
as well asToSic.Sxc.Dnn.ApiController
. So if you were eager to use these properties but didn't change the base class, you were able to use it. To protect thousands of upgrade-scenarios we had to take them away from the old base classes. Sorry!
Possible Breaking Changes
- We believe nothing broke, but it could be that some commands on
EntitiesToDictionary
orDataToDictionary
were accidentally changed. Pls report so we can fix that. - The
Link.To(...)
now returns safe URLs. This should not be an issue, but in rare cases post-processing of the string returned may expect spaces or something, which are now%20
- We disabled old obsolete APIs on the new Razor12, Api12 and Code12 base classes. In case you were using this (not likely) you'll get an error telling you about this.
Breaking Change Version 12.04
- DynamicEntity now has a property Count because it's a list as well, this could cause issues if a content-type has a property
Count
- DynamicEntity is now always a list. Because of this we removed the
DynamicEntityWithList
object. We believe the type is never referenced in user code, but if it is, this would be a breaking change. - Many parts that prepare Entities returned a
Dictionary<string, object>
and now return anIDictionary<string, object>
.
We believe this shouldn't hurt much, since the result would usually be in avar
or returend directly to the API for streaming, but in case someone had used explicitly typed code, this will require a minor change
Breaking Changes in EAV and 2sxc v11
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
There were small breaking changes in 11.00 to 11.11 but they were internal so shouldn't affect normal developers.
Breaking Changes Version 11.07 - Drop the old edit UI
- In 11.07 the old edit UI was removed, so customizations for that UI would not be in effect any more.
Breaking Changes Version 11.10 - Mainly Dependency Injection
- In v11.10 we used much more dependency injection than ever before and stopped using static values which were still in the API in many places. Because of this, certain helper objects to create entities or lookup values were changed and their constructors were changed. We invested a lot of time to try to ensure that old APIs still work, but in case you're hit by one of these, make sure you check the DI and switch to resolving the objects using DI.
Breaking Changes Version 11.11 - Language Detection
- Previously the language detection used the Thread culture. Turns out this wasn't reliable because Dnn does some funny stuff (probably historical) which means that API-calls ended up using the language stored in some cookie instead of the one specified by the URL. We changed this, which should be more reliable. But if you were relying on this strange effect, then it may be a breaking change.
- Internally our tokens were also using the thread culture. When we changed this, we also had to change how tokens pick up the language. In rare cases this may affect you.
- We changed all tokens to always resolve boolean values to
true
/false
(previously they would have been changed to the current language, likewahr
for german). We believe this change is only an improvement, and should ensure that internal resolves in Queries etc. result in reliable output.
Breaking Changes Version 11.11 - DataSources: DataSourceConfiguration
Note that we also improved the DataSourceConfiguration
to an interface IDataSourceConfiguration
and documented this.
As a side effect the API stays the same, but you will have to recompile your data sources for them to work again - sorry.
Breaking Changes Version 11.11.03 - IEntity Values
IEntity
had a command calledValue(fieldName)
which was probably never used. The idea used to be that it does language lookup internally, but we refactored this out since it could never be fully reliable because the full language list wasn't known to theIEntity
. So we re-purposed the method (assuming it's not used) to just lookup the first occurance of the value. This way it`s useful for configurations and similar which are not multi-language.IEntity
also had aValue(fieldname, lookup)
method. We are deprecating it, and making the lookup not happen from now on. We believe it was never used.IEntity
had a command calledPrimaryValue(fieldName)
which was probably never ever used, so we're deprecating it. UseValue(fieldName)
instead.
Breaking Changes Version 11.11.03 - Other
- UI Toolbar dropped the button and command for
item-history
, as the history is now part of the edit dialog
Breaking Changes in EAV and 2sxc
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Summary
Version 10 has a lot of small breaking changes because we restructured the internal API so it's consistent when we publish it. All these things shouldn't affect you, because they were internal APIs, but in case it does - here's what we did.
Version 10.22 and 10.23
- Renamed the
RootDataSource
and the Interface toIAppRoot
- Split SOC of the
AppRoot
DataSource so that caching, Root-Metadata and ListCache is fully separate - Since the Logging system now auto-picks up the code lines and names of the methods, we simplified the commands and dropped some parameters.
- Moved quite a bit of the DataSource objects into sub-objects, again for SOC.
Version 10.20-04 (ca. 2019-12-03)
- Renamed
DataTableDataSource
toDataTable
, old name still works. - Renamed
ExternalDataDataSource
toExternalData
, old name still works. - Renamed
ToSic.SexyContent.DataSources.ModuleDataSource
toToSic.Sxc.DataSources.CmsBlock
, old name still works. - Renamed
ToSic.Eav.DataSources.VisualQuery.VisualQueryAttribute
toToSic.Eav.DataSources.Queries.VisualQueryAttribute
, old name still works. - Renamed
ToSic.SexyContent.Environment.Dnn7.Factory
toToSic.Sxc.Dnn.Factory
, old name still works. - Renamed
ToSic.Eav.DataSources.BaseDataSource
toToSic.Eav.DataSources.DataSourceBase
for consistency, old name still works. - Moved the LookUp namespaces into the Core DLL
Version 10.20-02 (ca. 2019-11-22)
More internal changes which shouldn't affect anybody, but make the API ready for public docs...
- Moved/renamed the internal
Eav.AppDataPackage
toEav.Apps.AppState
- Moved/renamed some internal interfaces like
Entity...
- Did a major change for how
Attribute<T>
for relationships work.
Before they wereAttribute<EntityRelationship>
and now they areAttribute<IEnumerable<IEntity>>
.
This also affectsValue<EntityRelationship>
which is nowValue<IEnumerable<IEntity>>
- Moved
Tenant<T>
andContainer<T>
including matching interfaces toEav.Environment
- Renamed
IAppIdentity
toIInAppAndZone
andIZoneIdentity
toIInZone
- Renamed
ICacheKeyProvider
toICacheKey
- Renamed
CacheChainedIEnumerable<T>
toSynchronizedList<T>
- Moved/Renamed
MetadataFor
toEav.Metadata.Target
. Left old name compatible. - Moved some extension methods for IEntity from
ToSic.Eav.Data.Query
toToSic.Eav.Data
- Changed
Permissions
to be strong-typed EntityBased objects
Version 10.20.01 (2019-11-12)
- Internal code now uses the term
Header
instead ofListContent
. External code provides both for backward-compatibility - moved internal interfaces for engines (Razor/Token) to final namespaces
ToSic.Sxc.Engines
IEngine
EngineBase
ITokenEngine
IRazorEngine
- corrected architecture - some template-management code had slipped into
Eav.Apps
, was moved back toSxc.Apps
- The
Template
object was moved fromEav.Apps
toSxc.Views
and we added an interfaceIView
. We also renamed the internal propertiViewNameInUrl
toUrlIdentifier
. - To correct the API a CmsManager was created extending the AppManager, which is in charge of Views
- Moving internal stuff related to content blocks
IContentBlock
fromSexyContent.Interfaces
toSxc.Blocks
- from
ToSic.SexyContent.ISxcInstance
toToSic.Sxc.Blocks.IBlockContext
- actually moved a lot of things there incl.
ContentBlock
nowBlockConfiguration
and more - all internal stuff
- Moving the
ToSic.SexyContent.App
toToSic.Sxc.Apps.App
- In a razor page, we added the preferred
Purpose
. The oldInstancePurpose
will still work - Placed some things we just moved in 10.20 to a final place - since it's a very recent change, we updated the docs in the 10.20.00 section
Changed, but completely internal
- Some namespaces on
SexyContent.ContentBlocks
were moved toSxc.Blocks
Version 10.20.00 (2019-11-05)
- the internal interface
IInPageEditingHelpers
was moved fromToSic.SexyContent.Interfaces
to the namespaceToSic.Sxc.Web
- the internal interface
ILinkHelper
was moved toToSic.Sxc.Web
- the internal interface
IHtmlHelper
was moved toToSic.Sxc.Dnn
- the property
Configuration
on dynamic entities was deprecated in 2sxc 4 and removed in 2sxc 10 - we don't think it was ever used - moved internal Metadata interfaces (ca. 5) into final namespace ToSic.Eav.Metadata
- Moved a bunch of internal interfaces which we believe were never used externally from
ToSic.Eav.Interfaces
toToSic.Eav.Data
ToSic.Eav.Data.IAttribute
ToSic.Eav.IAttribute<T>
IAttributeBase
IAttributeDefinition
IChildEntities
IContentType
IDimension
IEntityLight
ILanguage
IRelationshipManager
IValue
IValue<T>
IValueOfDimension<T>
- Moved a bunch of internal interfaces which we believe were never used externally from
ToSic.Eav.Apps.Interfaces
toToSic.Eav.Apps
IApp
IAppData
IAppDataConfiguration
IAppEnvironment
IEnvironmentFactory
IInstanceInfo
IItemListAction
IPagePublishing
ITenant
IZoneMapper
- the internal namespace
ToSic.Eav.ValueProvider
was changed toToSic.Eav.LookUp
and inside it
we renamed a bunch of internal interfaces and objects which we believe were never used externally
Deprecated/Changed, but not broken
- the internal interface
ToSic.SexyContent.IAppAndDataHelpers
was renamed toToSic.Sxc.IDynamicCode
but the old interface still exists, so it shouldn't break
it was used by Mobius Forms - moved
ToSic.Eav.Interfaces.IEntity
toToSic.Eav.Data.IEntity
- but preserved the old interface for compatibility it was used everywhere
Clean-Up, but not broken
- We're transitioning to the term
Header
instead ofListContent
in templates.
The Razor pages and WebApi have this starting now, while old terms still work. Note that we're not creating aHeaderPresentation
, because you should useHeader.Presentation
Breaking Changes in EAV and 2sxc Version 9
We try to minimize breaking changes, and most breaking changes won't affect your work, because it's internal API. We're documenting it here to ensure you know what happened, in case you still run into this.
Version 9.20.00 (2018-03-04)
- Minor breaking change in ADAM properties, like
Id
instead ofFolderID
which was a leftover of Dnn naming.
see full blog post
Version 09.08.00 (2017-11-28)
- Minor breaking change
List<IEntity>
instead ofDictionary<int, IEntity>
on theIDataSource
see full blog post
Version 09.03.00 (2017-10-08)
- Breaking change on inconsistent naming
ToSic.Eav.IEntity
instead ofToSic.Eav.Interfaces.IEntity
.
see full blog post