Type Constraints (EDM)

The Entity Data Model (EDM) permits specification of constraints over the properties of its entity types. Constraints restrict the possible values of a property and verify that a value assigned to a property is not only the correct data type but that it is also valid for the business requirements of the application.

Nullable Constraint

Any property can be constrained by using the Nullable constraint. The Nullable constraint is the simplest kind of constraint and specifies whether the value of the property can be unassigned, or Null.

The Key property of an entity is used to identify instances of the type in applications. The Key property must be assigned a value when the entity is created. The Nullable constraint is always required on the property of an entity that contains the Key, and setting the Nullable constraint to false prevents instantiation of entities without identifiers.

The following schema specifies Nullable constraints on properties of the Person type. The EMailID property can be Null, but Name must be assigned a value or a runtime error will result when code saves the type to storage.

    <EntityType Name="Person">
        <Key>
            <PropertyRef Name="Name" />
        </Key>
        <Property Name="Name" Type="String" Nullable="false" />
        <Property Name="EmailID" Type="String" Nullable="false" />
        <Property Name="Address" Type="AddressType" Nullable="true" />
        <Property Name="PhoneNumber" Type="String" />
    </EntityType>

As in SQL Server, the default value of the Nullable attribute is true. Both the Address property and the PhoneNumber property in this example can be unassigned.

Default Attribute

The Default attribute specifies a value for a property if none is supplied when an instance of the entity is created. In the following example the Locale property defaults to NW Region if no other value is supplied when a new Customer is instantiated.

    <EntityType Name="Customer">
        <Key>
            <PropertyRef Name="CustomerId" />
        </Key>
        <Property Name="CustomerId" Type="String" Nullable="false" />
        <Property Name="Name" Type="String" Nullable="false" />
        <Property Name="Locale" Type="String" Default="NW Region"/>
        <!--Other Properties-->
    </EntityType>

See Also

Concepts

GetterAccess and SetterAccess Attributes (CSDL)
Simple Types (EDM)