Table of Contents

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 v20 - Moment-of-Truth

Important

2sxc v20 is a milestone clean-up release, so it contains a lot of breaking changes.

This is the Moment of Truth where you see if you accidentally used internal or very old APIs.

These changes should only affect you, if you are accessing exotic/internal APIs, or if you have some extremely old/deprecated code.

See also: MoT Policy (Moment of Truth)

Note that we marked the breaking changes like this

  • ⚠️ things which may affect you
  • ⬇️ things which are extremely unlikely to affect you
Tip

Note that the focus of breaking changes is on the Razor code. But there are also 2 small breaking changes in Formulas.

Highlights

Tip

Despite this being a breaking change, we want to emphasize that much of this is great news. It removes a lot of old cruft, and cleans up some history such as "SexyContent".

These changes only affect you, if you were doing some really nasty things, such as accessing the DB directly.

  1. ⚠️ All SQL tables and restructured - see 2sxc & EAV Database Changes in v20

  2. ⚠️ In Dnn, the module is now installed in /DesktopModules/ToSic.Sxc/ instead of /DesktopModules/ToSic_SexyContent/
    This could affect you, if you had direct links to

  3. ⚠️ In Dnn we stop auto-creating a web.config file in the /2sxc/ folder, so Razor files will no longer automatically use the old base class SexyContentWebPage. This should not affect you, you're installing old Apps in newer DNNs.
    🔨 see Fix Breaking Change Stop Razor from Default to SexyContentWebPage in v20

  4. ⬇️ The minimum Dnn version for v20 is now Dnn 9.11.02 (previously it was 9.6.1)
    This is because older DNNs have important security issues, and we want to force people to update.
    As of now, 2sxc v20 will still run on older DNNs, but we will not support it or test it.

  5. ⬇️ The image resizer only includes the 64 bit binaries, the 32 bit binaries were removed. This makes the distribution smaller, and I don't think anyone is using 32 bit servers anymore.

  6. ⬇️ All code was restructured to create smaller, more focused assemblies.
    This should not affect you, but if you were using some very old code, it may have been moved to a different assembly. This can affect you if you were using compiled code which referenced the old assemblies (not common).

  7. ⬇️ Most internal APIs were moved into Sys namespaces, so it's easier to see if you're using internal APIs.
    This should not affect you, unless you were already using internal APIs.

  8. ⬇️ In Dnn, the modules name is now 2sxc instead of SexyContent

Breaking IEntity API Changes (Razor)

Tip

If your code just used the normal DynamicEntity or TypedEntity / Items APIs, you are not affected by these changes.

But in rare cases, especially in older Apps, some workarounds were used to access the IEntity interface directly.

This is usually done by first running AsEntity(someObject) to get the IEntity underlying data.

  1. ⚠️ A very old interface ToSic.Eav.Interfaces.IEntity has been removed, please use ToSic.Eav.Data.IEntity instead.
    Some very old code may have used this to work around LINQ limitations. Just use the new one, it's the same thing (but with fewer APIs, according to clean-up below).
    We've added some error handling to find out if this is the problem you have, and should lead you to this page.

  2. ⚠️ IEntity has object Get(name, ...) and 2 special Get<TVal>(...) methods to get a value and convert it to string, int etc. The special typed <TVal> variants were moved into extension methods.
    Normally this should not affect you, if you are @using ToSic.Eav.Data in your code, since it will just work. If you did this is a more exotic way, add the @using ToSic.Eav.Data to your code, and it will work again.

  3. ⚠️ IEntity had various GetBestValue(...) APIs which were removed. We believe that about 2-3% of all code used this, so it may affect you. 🔨 see Fix Breaking Change drop old GetBestValue API in v20

  4. ⬇️ APIs on IEntity were modified

    1. .Children(...) and .Parents(...) now return IEnumerable<IEntity> instead of List<IEntity>.
      This will only affect you if you are using .Count on the result, in which case you should use .Count() instead.
  5. ⬇️ Old, deprecated APIs IEntity were removed.
    These have not worked properly for many years.
    We've added some error handling to find out if this is the problem you have, and should lead you to this page.

    1. object GetBestValue(string attributeName, bool resolveHyperlinks) - didn't work for a long time, is being removed

    2. TVal GetBestValue<TVal>(string name, string[] languages, bool resolveHyperlinks) - didn't work for a long time, is being removed

    3. object GetBestValue(string attributeName, string[] languages, bool resolveHyperlinks) - didn't work for a long time, is being removed

    4. object Value(string field, bool resolve = true) - didn't work for a long time, is being removed

    5. T Value<T>(string field, bool resolve = true) - didn't work for a long time, is being removed

  6. ⬇️ Some unofficial APIs on IEntity were removed

    1. object PrimaryValue(string attributeName)
      The term PrimaryValue was an idea which we never pursued further. please just use Get(...) instead

    2. TVal PrimaryValue<TVal>(string attributeName)
      The term PrimaryValue was an idea which we never pursued further. please just use Get(...) instead

    3. object Value(string attributeName)
      The term Value was an idea which we never pursued further. please just use Get(...) instead

    4. TVal Value<TVal>(string attributeName)
      The term Value was an idea which we never pursued further. please just use Get(...) instead

  7. ⬇️ An API giving access to the ContentType Description IContentType.Metadata.Description were removed We don't believe anyone used this.

Other Breaking Razor API Changes (Dnn only)

  1. ⚠️ The behavior to auto-load jQuery for very old Razor base classes was removed.
    A long time ago 2sxc accidentally loaded jQuery automatically in DNN.
    In those days, jQuery was used a lot. We stopped doing this for newer Razor base classes, but preserved the behavior for very old Razor base classes.
    This was removed in v20, so if you were using the old Razor base classes, you will need to add jQuery manually.
    Note: code for this was commented out with #RemovedV20 #OldDnnAutoJQuery.

  2. ⚠️ Three old APIs on old Razor Base classes such as SexyContentWebPage were removed. All have been deprecated since v12.
    They were originally meant to use the same Razor file to also create a WebApi and fill the DNN search index, but was deprecated a long time ago.

    1. Purpose - this was meant to tell Razor if it should prepare data for search or for view.
    2. CustomizeSearch(...) this was meant to customize the data for the search index. The functionality was moved to separate code many years ago.
    3. CustomizeData(...) this was a patchy way to specify the data for the razor template.
  3. ⚠️ The SexyContentWebPage had a List property which provided Element objects to loop through.
    They were deprecated since v12, and replaced with the new Razor base classes which are much better. If you were using these, please switch to the new Razor base classes and use the more modern approaches such as MyItem, MyItem.Presentation, Content, etc. 🔨 To fix, see Fix Breaking Change List of Elements in v20. Note: code for this was commented out with #RemovedV20 #Element.

  4. ⬇️ There is a /system folder in the DesktopModules which had extensions. Each could have a .data folder - this must now be App_Data.
    This is probably not an issue, as we will auto-rename this during the upgrade of v20.00.01

  5. ⚠️ Every App can have a similar /system folder. Each could have a .data folder - this must now be App_Data.
    This is rarely used, but you would have to manually rename this folder to App_Data if you had it.

  6. ⚠️ DNN had some very old (pre v8) WebApi routes like app-content, app-query and app-api which were removed.
    If you had these in your code, please use the same route, just without the app- prefix.

  7. ⬇️ An old interface ToSic.Sxc.Blocks.IRenderService was removed, since it's been superseded by ToSic.Sxc.Services.IRenderService. We believe it was used in 2-3 v12 Apps, so if you encounter this, just switch to ToSic.Sxc.Services.IRenderService instead.

  8. ⬇️ An internal interface called ToSic.Sxc.Data.IEntityLight was removed
    We don't believe anyone used this, but if you did, please use ToSic.Eav.Data.IEntity instead.

  9. ⬇️ A very old interface called SexyContent.Interfaces.IDynamicEntity was removed.
    If you really had this in your code, please use ToSic.Sxc.Data.IDynamicEntity instead.

  10. ⬇️ Some internal objects were consolidated, such as IAttributeBase which nobody should have used anyway
    We don't believe anyone used this.

  11. ⬇️ lots of internal namespaces and classes/interfaces were renamed, including but not limited to:

    1. DynamicEntity.GetEntityValue(string name) (removed)
  12. ⬇️ An old API used by some of the first Mobius Apps used App.Data.Cache.GetContentType.
    This has been obsolete since v10 and is now removed in v20.
    We suggest you use a newer Mobius App or if you're really desperate, see 🔨 Fix Breaking Change Removal of Cache on IAppData in v20.

  13. ⬇️ An old internal interface called ToSic.SexyContent.IAppAndDataHelpers was removed.
    It was implemented by ToSic.SexyContent.Razor.SexyContentWebPage and ToSic.SexyContent.WebApi.SxcApiController. The APIs on it still work, but the interface was removed; you should not notice the clean-up. See Fix Breaking Change Dnn Files / Folders in v20

Breaking Formulas API Changes

V1 form.runFormulas() Was Removed

The V1 formulas were not async, so they had a patchy solution for using formulas which requested data from the server. The old solution was to use fetch and in the promise, call form.runFormulas() to retrigger the formulas after the data was loaded.

2sxc 16 in early 2023 introduced V2 formulas which can return a promise. This will automatically trigger recalculations when the promise resolves, and allows for better control over what happens (like if the same formula should run again, or not).

Since v16 was released, any use of the old form.runFormulas() resulted in a warning in the console.

In v20, this method was disabled showing a JS error. If you were using it, please remove it and use the new V2 formulas instead.

Internal Formula Changes

An internal API which placed some experimental commands in the formula calls were moved to the context. Since it was only used internally, it should not affect anyone.

Other Changes

  1. ⬇️ Custom extensions (such as custom input fields) in the /system folder should place their data in the /system/[ext-name]/App_Data/system-custom/ path.
    Previously the path /system/[ext-name]/.data/ was also supported, but this is now removed.

  2. ⬇️ All system queries which are called System.Whatever previously also supported being called by Eav.Queries.Global.Whatever.
    This is now removed, so you should only use System.Whatever to call global queries.

  3. ⬇️ The DependenciesClass was previously called MyServices but it was very unclear, so it was renamed. ToSic.Eav.Data.IEntity.
    This is a breaking change, but we don't believe anyone used this interface directly, except in custom DataSources - where we kept the old name for compatibility.

  4. ⬇️ The IContentType had a .ContentTypeId which should only be .Id. The old .ContentTypeId was removed (deprecated since v13).
    This is a breaking change, but we don't believe anyone used this property directly.

  5. ⬇️ The IContentType had a .StaticName which should only be .NameId. The old .StaticName was removed (deprecated since v13).
    This is a breaking change, but we don't believe anyone used this property directly.

  6. ⬇️ Previously the APIs .Child(...), .Parent(...), .Children(...), and .Parents(...) on ITypedItem would return the related data without checking for publishing. Now it will check for publishing and only show draft children/parents to editors (v20.00.03).
    This is a breaking change, but we don't believe draft-children were used much.

  7. ⬇️ The ITypedItem had a .Dyn property which was removed (v20.00.04).
    It was a temporary addition (and always marked as such) thought to help in migrating code. But we're afraid people may use it and leave it in, so we decided it's best to completely remove it.


Breaking Changes in EAV and 2sxc v19

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

  1. ⬇️ An interface called ToSic.Sxc.DataSources.IBlockInstance was removed since it was identical to ToSic.Eav.DataSource.IDataSource and should not be used anywhere.
  2. ⬇️ Core objects like Entity, Attribute etc. were changed to record - this would only affect you if you inherited from them
  3. ⬇️ Cleanup internal APIs on an internal interface IEntityLight which is not public. Properties: Title, Attributes and this[...]
  4. ⚠️ Enhancement in the Pages DataSource - property renames Visible to IsNavigation and Clickable to IsClickable
  5. ⚠️ Enhancement to the Roles DataSource - renamed to UserRoles - breaking change!
  6. ⚠️ Renamed the system query System.Roles to System.UserRoles - breaking change!

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

  1. ToSic.Eav.App.AppData is renamed to ToSic.Eav.Apps.DataSources.AppDataWithCrud
  2. In Typed mode, the App.Data now has a different interface ToSic.Sxc.Apps.IAppDataTyped
  3. AppState changes...
  4. App object had a hidden AppState property which was never documented and is now removed.
    If you were using it, then probably to access GetContentType(string). You can find a replacement on App.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

  1. Various APIs which used to return an IHybridHtmlString now return an IRawHtml
    This is to sync types with RazorBlade. It should have no effect on any code out there, as the result type is usually dynamic
  2. Renamed the type ToSic.Sxc.Data.IDynamicMetadata to ToSic.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.
  3. Renamed ToSic.Sxc.Data.IDynamicField to ToSic.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

  1. Base classes were renamed because of confusing ...Pro suffix. RazorPro is now RazorTyped, ApiPro is ApiTyped and CodePro is CodeTyped #3147
  2. 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
  3. 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:

  1. If you have a custom DataSource, you will need to make some minor changes and recompile them
  2. If you used special, non-public Logging APIs you would need to update your work
  3. If you used any undocumented APIs, you will need to check if everything still works

API Changes that may affect you

  1. DataSource base class was completely refactored
    see instructions
  2. Old static ToSic.Eav.DataSource was removed (deprecated since v13)
  3. Internal logging API ILog was completely refactored
    see instructions
  4. Internal object wrappers were completely refactored
    see instructions
  5. TinyMCE Upgrade to v6
  6. Database changes
  7. Minor API changes

Breaking Updates which probably don't affect anybody

  1. SQL changes - minor updates to the Database
  2. Internal APIs which were removed
    1. Static ToSic.Eav.Data.Builder.AttribBuilder.AddValue(...)

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:

  1. TODO

API Changes that may affect you

  1. An internal user property IUser.IsDesigner was renamed to IUser.IsSiteDeveloper
  2. An internal, deprecated user property IUser.IsAdmin was removed
  3. An internal, deprecated user property IUser.IsSuperUser was removed
  4. An internal property IUser.Guid was changed from Guid? to Guid
  5. The Users DataSource had a property called IncludeSystemAdmins which was changed from bool to string to allow for more options
  6. The Users DataSource had a property called RoleIds which returned a non-standard string-array. It has been removed, and the new Roles returns standard related entities.
  7. 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.

  1. Changed IValue.Languages from IList to IEnumerable and made it immutable
  2. Change IEntity.Attributes from Dictionary<string, IAttribute> to IImmutableDictionary<string, IAttribute> as a step to later make it immutable
  3. Removed some old, probably never used APIs on IAttribute<T> such as
    • IAttribute<T>[int[] languageIDs]
    • IAttribute<T>[string]
    • IAttribute<T>[string[]]
    • IAttribute[string[] languageKeys] - was always marked as private
  4. Changed the type of Attribute.Type from string to ValueTypes to make it more strong-typed
  5. 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:

  1. 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.

  1. IEntity.GetDraft() was removed to ensure the entity is immutable
  2. IEntity.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.

  1. CsvDataSource is now Csv
  2. SerializationConfiguration is now Serialization

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:

  1. Change in App Zip Package in v14.08 v14.08
  2. Change in App Data Folder in v14.08 v14.08

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

  1. An old, non-DI feature for Inner Content is being deprecated and will be removed in v14
    see instructions

  2. An old feature for publishing module InstanceData as JSON is removed
    see instructions

  3. An old feature to create DataSources is removed
    see instructions

  4. Two old data-conversion features DataToDictionary and EntitiesToDictionary were removed
    see instructions

  5. Some internal functionality which enabled IEntity objects to convert links containing file:... and page:... has been removed. This only affects special deep code calls on IEntity and does _not affect DynamicEntity objects in Razor see instructions

  6. The old feature Eav.Factory.Resolve<T>() was deprecated and will be removed in v14
    see instructions

  7. The old feature BlockDataSource.Cache.GetContentType(...) was removed see instructions

  8. The Dnn Static ToSic.Sxc.Dnn.Factory is being deprecated and will be removed in v14 see instructions

Major Updates with may affect you

  1. The Image Resizer is being replaced with ImageFlow
  2. The App containing Site-wide settings is changed to Primary - previously it used the Content 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

  1. SQL changes - minor updates to the Database
  2. .net Framework and Dll Updated to Match Dnn 9 Requirements - but still works in Dnn 7.4.2
    1. .net Framework 4.7.2 now required (previously .net Framework 4.5.1)
    2. .net Standard 2.0.3 required (previously .net Standard 1.6)
      Important: This will be referenced in the web.config upon installation
    3. Dependency Injection updated to .net core 2.1.1 (previously 1.1)
    4. Newtonsoft.Json updated to v10.0.3
  3. Entity Framework updated to 2.1.1 (previously 1.1) - Oqtane is unmodified and uses 3.1.4
  4. Dnn DLLs renamed
    1. ToSic.Sxc.Dnn.dll became ToSic.Sxc.Dnn.Core.dll for consistency
    2. ToSic.SexyContent.WebApi.dll became ToSic.Sxc.Dnn.WebApi.dll
    3. ToSic.SexyContent.Razor.dll became ToSic.Sxc.Dnn.Razor.dll
  5. An internal object ToSic.Eav.Apps.State was removed

Internal APIs which were removed

  1. 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

  1. 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 as ToSic.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

  1. We believe nothing broke, but it could be that some commands on EntitiesToDictionary or DataToDictionary were accidentally changed. Pls report so we can fix that.
  2. 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
  3. 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

  1. 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
  2. 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.
  3. Many parts that prepare Entities returned a Dictionary<string, object> and now return an IDictionary<string, object>.
    We believe this shouldn't hurt much, since the result would usually be in a var 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

  1. 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

  1. 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

  1. 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.
  2. 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.
  3. We changed all tokens to always resolve boolean values to true/false (previously they would have been changed to the current language, like wahr 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

  1. IEntity had a command called Value(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 the IEntity. 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.
  2. IEntity also had a Value(fieldname, lookup) method. We are deprecating it, and making the lookup not happen from now on. We believe it was never used.
  3. IEntity had a command called PrimaryValue(fieldName) which was probably never ever used, so we're deprecating it. Use Value(fieldName) instead.

Breaking Changes Version 11.11.03 - Other

  1. 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

  1. Renamed the RootDataSource and the Interface to IAppRoot
  2. Split SOC of the AppRoot DataSource so that caching, Root-Metadata and ListCache is fully separate
  3. Since the Logging system now auto-picks up the code lines and names of the methods, we simplified the commands and dropped some parameters.
  4. Moved quite a bit of the DataSource objects into sub-objects, again for SOC.

Version 10.20-04 (ca. 2019-12-03)

  1. Renamed DataTableDataSource to DataTable, old name still works.
  2. Renamed ExternalDataDataSource to ExternalData, old name still works.
  3. Renamed ToSic.SexyContent.DataSources.ModuleDataSource to ToSic.Sxc.DataSources.CmsBlock, old name still works.
  4. Renamed ToSic.Eav.DataSources.VisualQuery.VisualQueryAttribute to ToSic.Eav.DataSources.Queries.VisualQueryAttribute, old name still works.
  5. Renamed ToSic.SexyContent.Environment.Dnn7.Factory to ToSic.Sxc.Dnn.Factory, old name still works.
  6. Renamed ToSic.Eav.DataSources.BaseDataSource to ToSic.Eav.DataSources.DataSourceBase for consistency, old name still works.
  7. 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...

  1. Moved/renamed the internal Eav.AppDataPackage to Eav.Apps.AppState
  2. Moved/renamed some internal interfaces like Entity...
  3. Did a major change for how Attribute<T> for relationships work.
    Before they were Attribute<EntityRelationship> and now they are Attribute<IEnumerable<IEntity>>.
    This also affects Value<EntityRelationship> which is now Value<IEnumerable<IEntity>>
  4. Moved Tenant<T> and Container<T> including matching interfaces to Eav.Environment
  5. Renamed IAppIdentity to IInAppAndZone and IZoneIdentity to IInZone
  6. Renamed ICacheKeyProvider to ICacheKey
  7. Renamed CacheChainedIEnumerable<T> to SynchronizedList<T>
  8. Moved/Renamed MetadataFor to Eav.Metadata.Target. Left old name compatible.
  9. Moved some extension methods for IEntity from ToSic.Eav.Data.Query to ToSic.Eav.Data
  10. Changed Permissions to be strong-typed EntityBased objects

Version 10.20.01 (2019-11-12)

  1. Internal code now uses the term Header instead of ListContent. External code provides both for backward-compatibility
  2. moved internal interfaces for engines (Razor/Token) to final namespaces ToSic.Sxc.Engines
    1. IEngine
    2. EngineBase
    3. ITokenEngine
    4. IRazorEngine
  3. corrected architecture - some template-management code had slipped into Eav.Apps, was moved back to Sxc.Apps
  4. The Template object was moved from Eav.Apps to Sxc.Views and we added an interface IView. We also renamed the internal properti ViewNameInUrl to UrlIdentifier.
  5. To correct the API a CmsManager was created extending the AppManager, which is in charge of Views
  6. Moving internal stuff related to content blocks
    1. IContentBlock from SexyContent.Interfaces to Sxc.Blocks
    2. from ToSic.SexyContent.ISxcInstance to ToSic.Sxc.Blocks.IBlockContext
    3. actually moved a lot of things there incl. ContentBlock now BlockConfiguration and more - all internal stuff
  7. Moving the ToSic.SexyContent.App to ToSic.Sxc.Apps.App
  8. In a razor page, we added the preferred Purpose. The old InstancePurpose will still work
  9. 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

  1. Some namespaces on SexyContent.ContentBlocks were moved to Sxc.Blocks

Version 10.20.00 (2019-11-05)

  1. the internal interface IInPageEditingHelpers was moved from ToSic.SexyContent.Interfaces to the namespace ToSic.Sxc.Web
  2. the internal interface ILinkHelper was moved to ToSic.Sxc.Web
  3. the internal interface IHtmlHelper was moved to ToSic.Sxc.Dnn
  4. the property Configuration on dynamic entities was deprecated in 2sxc 4 and removed in 2sxc 10 - we don't think it was ever used
  5. moved internal Metadata interfaces (ca. 5) into final namespace ToSic.Eav.Metadata
  6. Moved a bunch of internal interfaces which we believe were never used externally from ToSic.Eav.Interfaces to ToSic.Eav.Data
    1. ToSic.Eav.Data.IAttribute
    2. ToSic.Eav.IAttribute<T>
    3. IAttributeBase
    4. IAttributeDefinition
    5. IChildEntities
    6. IContentType
    7. IDimension
    8. IEntityLight
    9. ILanguage
    10. IRelationshipManager
    11. IValue
    12. IValue<T>
    13. IValueOfDimension<T>
  7. Moved a bunch of internal interfaces which we believe were never used externally from ToSic.Eav.Apps.Interfaces to ToSic.Eav.Apps
    1. IApp
    2. IAppData
    3. IAppDataConfiguration
    4. IAppEnvironment
    5. IEnvironmentFactory
    6. IInstanceInfo
    7. IItemListAction
    8. IPagePublishing
    9. ITenant
    10. IZoneMapper
  8. the internal namespace ToSic.Eav.ValueProvider was changed to ToSic.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

  1. the internal interface ToSic.SexyContent.IAppAndDataHelpers was renamed to ToSic.Sxc.IDynamicCode but the old interface still exists, so it shouldn't break
    it was used by Mobius Forms
  2. moved ToSic.Eav.Interfaces.IEntity to ToSic.Eav.Data.IEntity - but preserved the old interface for compatibility it was used everywhere

Clean-Up, but not broken

  1. We're transitioning to the term Header instead of ListContent in templates.
    The Razor pages and WebApi have this starting now, while old terms still work. Note that we're not creating a HeaderPresentation, because you should use Header.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)

  1. Minor breaking change in ADAM properties, like Id instead of FolderID which was a leftover of Dnn naming.
    see full blog post

Version 09.08.00 (2017-11-28)

  1. Minor breaking change List<IEntity> instead of Dictionary<int, IEntity> on the IDataSource
    see full blog post

Version 09.03.00 (2017-10-08)

  1. Breaking change on inconsistent naming ToSic.Eav.IEntity instead of ToSic.Eav.Interfaces.IEntity.
    see full blog post