There are three different types of custom entity data model annotations:
Each of these are explained below:
[CustomEntity]
The [CustomEntity]
data annotation can be used to decorate an integer to indicate it is the id of a custom entity. The annotation is for a specific custom entity type and the definition code must be supplied in the attribute constructor.
A nullable integer indicates this is an optional field, while a non-null integer indicates this is a required field.
Example
public class ExampleDataModel : ICustomEntityDataModel
{
[CustomEntity(CategoryCustomEntityDefinition.DefinitionCode)]
public int RequiredCategoryId { get; set; }
[CustomEntity(CategoryCustomEntityDefinition.DefinitionCode)]
public int? OptionalCategoryId { get; set; }
}
[CustomEntityCollection]
The [CustomEntityCollection]
data annotation can be used to decorate a collection of integers, indicating the property represents a set of custom entity ids. The annotation is for a specific custom entity type and the definition code must be supplied in the attribute constructor.
Optional parameters:
- IsOrderable: Set to true to allow the collection ordering to be set by an editor using a drag and drop interface. Defaults to false.
Example:
public class ExampleDataModel : ICustomEntityDataModel
{
[CustomEntityCollection(CategoryCustomEntityDefinition.DefinitionCode)]
public int[] CategoryIds { get; set; } = [];
[CustomEntityCollection(CategoryCustomEntityDefinition.DefinitionCode, IsOrderable = true)]
public int[] OrderableCategoryIds { get; set; } = [];
}
[CustomEntityMultiTypeCollection]
The [CustomEntityMultiTypeCollection]
data annotation can be used to decorate a collection of CustomEntityIdentity
objects, indicating the property represents a set of custom entities of mixed types. The entity types must be defined in the attribute constructor by passing in custom entity definition codes.
Optional parameters:
- IsOrderable: Set to true to allow the collection ordering to be set by an editor using a drag and drop interface. Defaults to false.
- TitleColumnHeader: The text to use in the column header for the title field. Defaults to "Title".
- DescriptionColumnHeader: The text to use in the column header for the description field. Defaults to "Description".
- ImageColumnHeader: The text to use in the column header for the image field. Defaults to empty string.
- TypeColumnHeader: The text to use in the column header for the model type field. Defaults to "Type".
Example:
public class ExampleDataModel : ICustomEntityDataModel
{
[CustomEntityMultiTypeCollection(
BlogPostCustomEntityDefinition.DefinitionCode,
CaseStudyCustomEntityDefinition.DefinitionCode)]
public CustomEntityIdentity[] CustomEntityIds { get; set; } = [];
[CustomEntityMultiTypeCollection(
BlogPostCustomEntityDefinition.DefinitionCode,
CaseStudyCustomEntityDefinition.DefinitionCode,
IsOrderable = true)]
public CustomEntityIdentity[] OrderableCustomEntityIds { get; set; } = [];
}