---
title: Content types and property definitions breaking changes
slug: cms-13/docs/content-types-and-property-definitions-breaking-changes
docTags: 
createdAt: 2026-07-30T20:22:10.000Z
---

This article covers content type, property definition, tab definition, block type, and Dynamic Properties breaking changes in CMS 13.

## Name validation rules

CMS 13 enforces stricter naming rules across content types, property definitions, property definition types, and tab definitions. These rules are applied during database migration and at runtime.

### Rules for all definition names

- **Length** – Names must be between 2 and 255 characters.
- **Format** – Names must start with a letter and contain only letters, digits, and underscores. The pattern is `^[A-Za-z][_0-9A-Za-z]+`.
- **Spaces and special characters are not allowed** in programmatic names. Use `[Display(Name = "...")]` attributes to set human-readable display names.

### Automatic migration

Existing definitions with invalid names are migrated automatically when upgrading to CMS 13:

| Definition Type                                           | Single-character prefix | Invalid character replacement        |
| --------------------------------------------------------- | ----------------------- | ------------------------------------ |
| Content types (`ContentType.Name`)                        | `CT_` prefix added      | Invalid characters replaced with `_` |
| Property definitions (`PropertyDefinition.Name`)          | `PD_` prefix added      | Invalid characters replaced with `_` |
| Property definition types (`PropertyDefinitionType.Name`) | `PDT_` prefix added     | Invalid characters replaced with `_` |
| Tab definitions (`TabDefinition.Name`)                    | `G_` prefix added       | Invalid characters replaced with `_` |

### Tab definition impact

Tab names that previously contained spaces or special characters (for example, `"List Definition"`, `"Meta Data / SEO"`, `"Error Pages"`) must be updated to valid names (for example, `"ListDefinition"`, `"MetaData"`, `"ErrorPages"`). Use the `[Display(Name = "...")]` attribute to preserve the human-readable display name in the UI.

## EPiServer.DataAbstraction.ContentType

- Property `DefaultWebFormTemplate` was removed because WebForms is not supported.
- `LocalizationService` service properties were removed as localized labels are retrieved directly from the `LocalizationService`.

## EPiServer.DataAbstraction.IContentTypeRepository

The `IContentTypeRepository` interface has significant behavior changes in CMS 13:

- The generic `IContentTypeRepository<>` implementation was removed. Use the non-generic `IContentTypeRepository` instead.
- The interface now implements methods previously inherited from `EPiServer.DataAbstraction.IContentTypeRepository<>`.
- The interface includes the `Save(IEnumerable<ContentType>, ContentTypeSaveOptions)` method previously specified on `EPiServer.DataAbstraction.ContentTypeRepository`.
- The `Save(ContentType)` method also saves the `PropertyDefinitions` on the `ContentType`.
- `Load(string name)` is now case-insensitive.
- Default behavior for method `Save` has changed so properties not present in `contentType.PropertyDefinitions` are deleted. Previously, they were deleted only if no data was persisted. Use `ContentTypeSaveOptions.KeepUndefinedPropertyDefinitions` to keep properties not present in the definition.
- Changes only in casing on properties (`Name`, `EditCaption`, `HelpText`, `DefaultValue`, and `EditorHint`) are no longer ignored when saving.
- Changing `Required` for a property definition is now considered a `Major` semantic change (previously it was `Minor`).
- Saving a content type with an empty `ACL` no longer resets it to its default value. Saving with `ACL` set to `null` still resets to the default.
- Saving a content type with an `ACL` containing an entry with a different access level than `Create` now throws a `ValidationException`.
- The `Save` method validates content type access requirements when creating a content item unless `AccessLevel.NoAccess` is passed in.
- The `List` method now first sorts on `SortOrder` and then on `Name` for ContentTypes that have same value on `SortOrder`. Previously the sorting was not deterministic for ContentTypes with same `SortOrder`.

## EPiServer.DataAbstraction.ContentTypeRepository

This base class is obsolete and is no longer implemented by the default implementation.

## EPiServer.DataAbstraction.ContentTypeModelRepository

The class is obsolete, to be replaced by the `EPiServer.DataAbstraction.RuntimeModel.IContentTypeModelRepository` service. The default constructor was replaced by one taking dependencies.

## EPiServer.DataAbstraction.IPropertyDefinitionRepository

- Methods `Save` and `Delete` were made obsolete with a compilation error. To add, update, or remove a `PropertyDefinition` from a `ContentType`, load the `ContentType` and add, update, or remove entries in the property `PropertyDefinitions`.
- `CheckUsage()` – `isDynamic` parameter was removed. Dynamic Properties are no longer supported.
- `GetUsage()` – `isDynamic` parameter was removed. Dynamic Properties are no longer supported.
- `ListDynamic()` – Method was removed. Dynamic Properties are no longer supported.
- `Save` – A new argument was added to indicate whether the cache should be cleared.
  - Throws `ValidationException` instead of `DataAbstractionException` when the `PropertyDefinition.Name` is invalid.
  - Throws `ValidationException` instead of `NotSupportedException` when a block property is set as `Required` or `LanguageSpecific`.
  - Throws `ValidationException` instead of `DataAbstractionException` when a block used in a list property contains a category property.

## EPiServer.DataAbstraction.PropertyDefinitionRepository

- The `PropertyDefinitionRepository` is obsolete and is no longer used in the CMS. Use `IPropertyDefinitionRepository` instead.
- The `PropertyDefinitionSaved` event no longer raises when a `Tab` or `PropertyDefinitionType` is updated.

## EPiServer.DataAbstraction.PropertyDefinition

- Property `Searchable` is obsolete in favor of property `IndexingType`.
- Property `IsDynamicProperty` was removed. Dynamic Properties are no longer supported.
- Property `LocalizationService` was obsoleted.

## EPiServer.DataAbstraction.PropertyDefinitionFields

- `Searchable` was removed in favor of `IndexingType`.

## EPiServer.DataAbstraction.PropertyDefinitionType

- `LocalizationService` and `ContentTypeRepository` service properties were removed as localized labels are retrieved directly from the `LocalizationService`.

## EPiServer.DataAbstraction.IPropertyDefinitionTypeRepository

- Method `Save` throws `ValidationException` instead of `ArgumentException` when the `PropertyDefinitionType.Name` is invalid.
- Events `PropertyDefinitionTypeDeleted`, `PropertyDefinitionTypeSaving`, and `PropertyDefinitionTypeSaved` on `Internal.PropertyDefinitionTypeRepository` were removed in favor of events on the `IPropertyDefinitionTypeEvents` interface.

## EPiServer.DataAbstraction.IBackingTypeResolver

- The return type of the `Resolve` method changed from `Type` to `PropertyDefinitionTypeResolution`. The .NET backing type can be accessed from the `PropertyDefinitionType.DefinitionType` instead.

## Block type changes

- `EPiServer.DataAbstraction.BlockPropertyDefinitionType` – CMS 13 no longer creates different `PropertyDefinitionType` instances per block type. Instead, there is a common `PropertyDefinitionType` (with `DataType` as `Block`) for all block types. The specific block type is defined on `PropertyDefinition.ItemTypeReference` for a block property.
- `EPiServer.DataAbstraction.BlockTypeRepository` – Removed in favor of `EPiServer.DataAbstraction.IContentTypeRepository`.
- `EPiServer.DataAbstraction.PageTypeRepository` – Removed in favor of `EPiServer.DataAbstraction.IContentTypeRepository`.
- `EPiServer.DataAbstraction.PageType` – Properties `FileName`, `FileNameForSite`, and `ExportableFileName` were removed (historical WebForms support). `fileName` was removed from the constructor.

## Searchable attribute changes

- `EPiServer.DataAnnotations.SearchableAttribute` – Type now inherits `EPiServer.DataAnnotations.IndexingTypeAttribute`. The constructor that accepted a bool argument is obsolete. Use IndexingTypeAttribute instead. The property `IsSearchable` is made obsolete in favor of `IndexingType`.
- `EPiServer.DataAbstraction.RuntimeModel.PropertyDefinitionModel` – `Searchable` was removed in favor of `IndexingType`.

## EPiServer.DataAbstraction.TabDefinition

- Constructor with `LocalizationService` argument was removed. Use other constructor.

## EPiServer.DataAbstraction.ITabDefinitionRepository

- Method `Save` throws `ValidationException` instead of `DataAbstractionException` when the `TabDefinition.Name` is empty.

## Runtime model changes

- `EPiServer.DataAbstraction.RuntimeModel.ContentDataInterceptor` – Made internal.
- `EPiServer.DataAbstraction.RuntimeModel.ContentDataInterceptorHandler` – Made internal. If you need to register a custom accessor for property data, use `EPiServer.DataAbstraction.RuntimeModel.IPropertyDataInterceptorRegistrator` instead.
- `EPiServer.DataAbstraction.RuntimeModel.IAvailableModelSettingsRepository` – New method `GetRuntimeSetting(ContentType contentType)` was added.
- `EPiServer.DataAbstraction.RuntimeModel.IContentTypeModelRepository` – New method `GetContentTypeModel(ContentType contentType)` was added.

## Dynamic Properties removal

Dynamic Properties are fully removed in CMS 13. The following classes, interfaces, and members have been deleted:

- `EPiServer.DataAbstraction.DynamicProperty`
- `EPiServer.DataAbstraction.DynamicPropertyCollection`
- `EPiServer.DataAbstraction.DynamicPropertyStatus`
- `EPiServer.Core.DynamicPropertyBag`
- `EPiServer.Core.DynamicPropertyCache`
- `EPiServer.Core.DynamicPropertyLookup`
- `EPiServer.Core.DynamicPropertyPage`
- `EPiServer.Core.IDynamicPropertyLookup`
- `EPiServer.Core.ContentOptions.EnableDynamicProperties` – Now throws `NotSupportedException`.
- `EPiServer.DataAbstraction.PropertyDefinition.IsDynamicProperty` – Removed.
- `EPiServer.DataAbstraction.PropertyGetHandler.PropertyHandlerWithDynamicProperties()` – Removed.

The associated stored procedures and database tables have also been removed.

## Other data abstraction changes

- `EPiServer.DataAbstraction.Activities.Activity` – Property `RawData` was removed in favor of property `ExtendedData`.
- `EPiServer.DataAbstraction.Activities.ContentActivityFeed` – The `Instance` property is obsolete. Retrieve the singleton instance from the service container.
- `EPiServer.DataAbstraction.ContentCoreData` – Removed in favor of `EPiServer.DataAbstraction.ContentNode`. The `ContentNode` class provides similar functionality with improved naming and additional tracking properties.
- `EPiServer.DataAbstraction.IContentCoreDataLoader` – Removed in favor of `EPiServer.DataAbstraction.IContentNodeLoader`.
- `EPiServer.DataAbstraction.ConflictingResourceException` – Constructor that accepts `message` and `inner exception` has replaced another constructor.
- `EPiServer.DataAbstraction.ILanguageBranchRepository` – Method `Save` now throws `ConflictingResourceException` instead of `DataAbstractionException` when the `LanguageBranch.LanguageID` already exists, and instead of `EPiServerException` when the `LanguageBranch.URLSegment` is already in use.
- `EPiServer.DataAbstraction.Category` – `LocalizationService` service properties were removed.
- `EPiServer.DataAbstraction.Frame` – `LocalizationService` service properties were removed.
- `EPiServer.DataAbstraction.SoftLink` – Property `LinkStatus` was removed. Use property `HttpStatusCode` instead.
- `EPiServer.DataAbstraction.IContentSoftLinkRepository` – New method `Load` was added.
- `EPiServer.DataAbstraction.ContentCoreData` – Property `ExternalFolderID` was removed because it is no longer used.
