Breeze supports the concept that any data property of an Entity can be an instance of a complex type. A
complexType property is a data property that represents a defined collection of other data Properties and possibly nested complex type properties. An example might be a
location property on a
Customer class, where the location consists of an address, city, state, and zip code. In this case, the
location property on the
Customer type is termed a complex property, and the data type of this property would be a complex type of type
location. The path to a city in this case would be
Complex types in Breeze are much like entity type’s but with some key differences.
Complex types do not have identities (key properties in breeze) and therefore cannot exist independently. Complex types can only exist as properties on entity types or other complex types.
complexType.createInstancemethod but when you assign it, you are simply copying its values onto an existing instance.
Complex types cannot contain navigation properties or foreign key data properties.
Complex type properties,
aCustomer.location in the example above, are not nullable and are automatically created when their parent entity or complex object is created. Note that any of the properties of the complex type instance itself ( that are not themselves complex types) may be nullable.
When instances of a complex type are assigned, the contents of the
complexType instance are copied to the target. Complex types are not assigned by reference.
Every instance of a complex type object has two properties automatically added by Breeze:
A complexType property - This is the type metadata for the specific complex type that describes this object. A
complexType property is analogous to the
entityType property on Breeze entities.
A complexAspect property - This contains information about the ‘parentage’ of this instance and any original values for change tracking purposes. The
complexAspect is analogous to the
entityAspect property on every Breeze entities.
Queries can return
ComplexType properties can be queried, i.e.
EntityQuery.from("Customer").where("location.city", "startsWith", "A")
Entities containing complex types may be saved.
EntityManager.EntityChangedevents return “property paths” whenever a property of an embedded complex type is modified. i.e.
registerEntityTypeCtor all either take or return
ComplexType instances in addition to
EntityTypes may be distinguished from
ComplexTypes by using
aType instanceof EntityType or
aType instanceof ComplexType
Validating an entity validates all of the properties, including complex type properties of an entity
Validating a complex type property involves validating all of its properties.
Property level validation errors involving complex type properties include the “property path” to the errant property.