Content Metadata properties
Describes metadata interfaces and metadata properties that you can define on content models.
EPiServer.Core.IContentData is the base interface that content models implement. All content types, except BlockData, also implement the EPiServer.Core.IContent interface; the interface is required for a content instance to have a unique ID and its own lifecycle (that is, it can be loaded or saved individually). Through the EPiServer.IContentRepository, you can perform CRUD (Create, Read, Update, Delete) operations on content instances implementing EPiServer.Core.IContent, for example, listing and move.
There are also many additional metadata interfaces a content type can implement that define its characteristics. Here is a list of the existing metadata interfaces, with a description of each interface's purpose and which properties it contains.
Usage
Because some of the interfaces are optional, a recommended pattern when working with a "general" IContent instance is to use the is or as operators to check if the instance implements an interface, as in this example:
public static CultureInfo Language(this IContent content) {
if (content == null) throw new ArgumentNullException(nameof(content));
return (content is ILocale locale) ? locale.Language : CultureInfo.InvariantCulture;
}
public static bool IsModified(this IContent content) {
if (content == null) throw new ArgumentNullException(nameof(content));
var modifiedTrackable = content as IModifiedTrackable;
return modifiedTrackable == null || modifiedTrackable.IsModified;
}Shared blocks
BlockData does not implement IContent, while shared block instances still have their own identity defined on IContent. This is accomplished so that during runtime, when a shared block instance is created (for example, through a call to IContentRepository.GetDefault<T> where T is a type inheriting from BlockData), the CMS creates a new .NET type inheriting T using a technique called mixin where the newly generated subclass will implement some extra interfaces (including IContent).
That means that a shared block instance of T will implement IContent while an instance of T that is a property on a Page will not.
IContentData
Base interface for content models. It contains a backing PropertyDataCollection that is used when loading or saving data from the database.
| Member | Type | Description |
|---|---|---|
Property | PropertyDataCollection | Contains backing data for properties used by the content instance. |
IContent
You can individually load or save base interfaces for content models with an identity. IContent inherits IContentData. Note that ContentLink.ID and ContentGuid is the same for language branches for a content item. So the combination of ContentLink or ContentGuid and ILocale.Language uniquely specifies the content instance (given that the content implements ILocalizable). Built-in base content types, (except BlockData), implement IContent. Shared block instances implement IContent (and most other metadata interfaces) at runtime.
| Member | Type | Description |
|---|---|---|
Name | string | The name of the content instance. |
ContentLink | ContentReference | The identifier of the content instance. If the instance represents a specific version, WorkID specifies an optional version ID. |
ContentGuid | Guid | A GUID-based identifier for the content instance. |
ParentLink | ContentReference | The parent identifier (in a tree structure) for the content instance. |
ContentTypeID | int | An identifier that specifies which content type the content is an instance of. |
IsDeleted | bool | Indicates if the content instance is in the wastebasket. |
Property | PropertyDataCollection | Inherited from IContentData. |
IVersionable
An optional interface for content that supports different versions for each language branch. There can only be at most one version published at each time. All built-in types, except ContentFolder, implement IVersionable. See Content versions for information regarding versions.
| Member | Type | Description |
|---|---|---|
Status | VersionStatus | Specifies the status of the content version. |
IsPendingPublish | bool | Specifies if there is any published version for the current language branch. |
StartPublish | DateTime? | Optional value that specifies when the content is/was published. |
StopPublish | DateTime? | Optional value that specifies when the content is/was depublished. |
ILocale
An optional interface for content that specifies which language a specific content instance has. All built-in types except ContentFolder implements ILocale.
| Member | Type | Description |
|---|---|---|
Language | CultureInfo | Specifies the language of a content instance. CultureInfo.InvariantCulture means that the content instance is not culture-specific. |
ILocalizable
An optional interface for content that support multiple language branches. Inherits ILocale. Built-in types, (except ContentFolder and MediaData), implement ILocalizable.
| Member | Type | Description |
|---|---|---|
Language | CultureInfo | Inherits from ILocale. |
MasterLanguage | CultureInfo | Specifies which language version that contains the none language-specific properties. |
ExistingLanguages | IEnumerable<CultureInfo> | Specifies existing language branches for this content. |
IReadOnly and IReadOnly<T>
<T>An optional interface for content that support read-only instances. It is highly recommended that content types implement IReadOnly, which ensures the integrity of the content instances when instances are served from the cache and hence reused across different requests. Built-in base content classes implement IReadOnly.
| Member | Type | Description |
|---|---|---|
IsReadOnly | bool | Specifies if the current instance is read-only. |
void MakeReadOnly() | Method | Makes an instance read-only. |
object/T CreateWritableClone() | Method | Creates a writable clone from a read-only instance. |
IModifiedTrackable
An optional interface for content instances that support modified tracking. There is a high-performance gain during save operations if you use IModifiedTrackable because only data that has actually changed needs to be persisted. Built-in base content classes implement IModifiedTrackable.
| Member | Type | Description |
|---|---|---|
IsModified | bool | Specifies it the current instance is modified. |
void ResetModified() | Method | Sets the content instance in a non-modified state. |
IChangeTrackable
An optional interface for content instances that support tracking of changes. Built-in base content classes implement IChangeTrackable.
| Member | Type | Description |
|---|---|---|
IsModified | bool | Specifies if the current instance is modified. |
void ResetModified() | Method | Sets the content instance in a non-modified state. |
IContentSecurable
An optional interface for content instances that support access checks. Built-in base content classes implement IContentSecurable.
| Member | Type | Description |
|---|---|---|
IContentSecurityDescriptor GetContentSecurityDescriptor() | Method | Gets the security descriptor for the content instance where access rights can be checked. |
IRoutable
An interface that content items that should be routable through a content URL should implement. Built-in base content classes, except shared blocks, implement IRoutable.
| Member | Type | Description |
|---|---|---|
RouteSegment | string | Specifies the route segment that is used for the content instance in the hierarchical content url. |
ICategorizable
An interface that content items that should be possible to categorize should implement. Built-in base content classes, except content folders, implement ICategorizable.
| Member | Type | Description |
|---|---|---|
Category | CategoryList | A list of all categories that this content instance is categorized as. |
IInitializableContent
If you should add default values when you create an instance of the content type, you can optionally implement the IInitializableContent interface for content items.
| Member | Type | Description |
|---|---|---|
void SetDefaultValues(ContentType contentType) | Method | Called when a new instance of the content type is created. |
IExportable
An optional interface that specifies how a content instance should be handled during export.
| Member | Type | Description |
|---|---|---|
ShouldBeImplicitlyExported | bool | Specifies whether this instance should be implicitly added to the export package when referenced by some exported entity. |
Updated about 2 months ago