Metadata schema

The following is the schema for breeze metadata described as a json.schema document ( see http://json-schema.org ).

Immediately after the schema definition is a simple example of a valid json object built according to this schema that describes a small object model. Standalone file versions of each of these can also be found inside the breeze samples zip in the “Metadata” directory.

  {
      "title": "Breeze Metadata Schema",
      "type": "object",
      "properties": {
          "structuralTypes": {
              "description": "Array of entity type/complex type names to their metadata definitions.  The key is a structural type name and the value is either an entityType or a complexType",
              "type": "array",
              "items": {
                  "type": "object",
                  "oneOf": [
                      { "$ref": "#/definitions/entityType" },
                      { "$ref": "#/definitions/complexType" }
                  ]
              }
          },
          "resourceEntityTypeMap": {
              "description": "Map of resource names to entity type names.",
              "type": "object",
              "additionalProperties": {
                  "description": "Fully qualified Entity type names.",
                  "$ref": "#/definitions/structuralTypeName"
              }
          },
   
          "metadataVersion": {
              "description": "The serialization version for this document",
              "type": "string"
          },
          "namingConvention": {
              "description": "On deserialization, this must match the name of some 'namingConvention' already registered on the breeze client.",
              "type": "string"
          },
          "localQueryComparisonOptions": {
              "description": "On deserialization, this must match the name of some 'localQueryComparisonOptions' already registered on the breeze client.",
              "type": "string"
          },
          "dataServices": {
              "type": "array",
              "items": { "$ref": "#/definitions/dataService" }
          }
   
      },
      "required": ["structuralTypes"],
      "additionalProperties": true,
      "definitions": {
          "structuralTypeName": {
              "description": "A fully qualified entity/complex type name - constructed as 'shortName' + ':#' + 'namespace'",
              "type": "string",
              "pattern": "\\S+:#\\S*"
          },
          "entityType": {
              "properties": {
                  "shortName": {
                      "description": "Together the shortName and the namespace make up a fully qualified name.  Within this metadata references to an entityType are all qualified references. See the 'structuralTypeName' definition.instanceof in this document.",
                      "type": "string"
                  },
                  "namespace": {
                      "type": "string",
                      "default": ""
                  },
                  "autoGeneratedKeyType": {
                      "description": "Defines the mechanism by which the key for entities of this type are determined on the server.  'None' means that the client sets the key.",
                      "enum": ["Identity", "None", "KeyGenerator"],
                      "default": "None"
                  },
                  "defaultResourceName": {
                      "description": "The default name by which entities of this type will be queried.  Multipe 'resourceNames' may query for the same entityType, (see the 'resourceEntityTypeMap') but only one is the default.",
                      "type": "string"
                  },
                  "dataProperties": {
                      "type": "array",
                      "items": { "$ref": "#/definitions/dataProperty" },
                      "uniqueItems": true
                  },
                  "navigationProperties": {
                      "type": "array",
                      "items": { "$ref": "#/definitions/navigationProperty" },
                      "uniqueItems": true
                  }
              },
              "required": ["shortName", "autoGeneratedKeyType", "dataProperties"]
          },
          "complexType": {
              "properties": {
                  "shortName": {
                      "description": "Together the shortName and the namespace make up a fully qualified name.  Within this metadata references to an entityType are all qualified references. See the 'structuralTypeName' definition.instanceof in this document.",
                      "type": "string"
                  },
                  "namespace": {
                      "type": "string",
                      "default": ""
                  },
                  "isComplexType": {
                      "description": "This must be 'true'.  This field is what distinguishes an entityType from a complexType. ",
                      "type": "boolean"
                  },
   
                  "dataProperties": {
                      "type": "array",
                      "items": { "$ref": "#/definitions/dataProperty" },
                      "uniqueItems": true
                  }
              },
              "required": ["shortName", "dataProperties", "isComplexType"]
          },
          "dataProperty": {
              "description": "A single data property, at a minimum you must to define either a 'name' or a 'nameOnServer' and either a 'dataType' or a 'complexTypeName'.",
              "properties": {
                  "name": {
                      "description": "The client side name of this property.",
                      "type": "string"
                  },
                  "nameOnServer": {
                      "description": "The server side side name of this property. Either name or nameOnServer must be specified and either is sufficient.",
                      "type": "string"
                  },
                  "dataType": {
                      "description": "If present, the complexType name should be omitted.",
                      "enum": ["String", "Int16", "Int32", "Int64", "Single", "Double", "Decimal", "DateTime", "DateTimeOffset", "Time", "Boolean", "Guid", "Byte", "Binary", "Undefined"],
                      "default": "String"
                  },
                  "complexTypeName": {
                      "description":  "If present, this must be the fully qualified name of one of the 'complexTypes' defined within this document, and the 'dataType' property may be omitted",
                      "$ref": "#/definitions/structuralTypeName"
                  },
                  "isNullable": {
                      "description": "Whether a null can be assigned to this property.",
                      "type": "boolean",
                      "default": true
                  },
                  "defaultValue": {
                      "description": "The default value for this property if nothing is assigned to it.",
                      "type": ["string", "number", "boolean", "null"]
                  },
                  "isPartOfKey": {
                      "description": "Whether this property is part of the key for this entity type",
                      "type": "boolean",
                      "default": false
                  },
                  "concurrencyMode": {
                      "description": "This determines whether this property is used for concurreny purposes.",
                      "enum": ["Fixed", "None"],
                      "default": "None"
                  },
                  "maxLength": {
                      "description": "Only applicable to 'String' properties. This is the maximum string length allowed.",
                      "type": "number"
                  },
                  "validators": {
                      "description": "A list of the validators (validations) that will be associated with this property",
                      "type": "array",
                      "items": { "$ref": "#/definitions/validator" },
                      "uniqueItems": true
                  }
              }
          },
          "navigationProperty": {
              "description": "A single navigation property, at a minimum you must to define the 'required' properties defined below AS WELL AS either a 'name' or a 'nameOnServer'..",
              "properties": {
                  "name": {
                      "description": "The client side name of this property.",
                      "type": "string"
                  },
                  "nameOnServer": {
                      "description": "The server side side name of this property. Either name or nameOnServer must be specified and either is sufficient.",
                      "type": "string"
                  },
                  "entityTypeName": {
                      "description": "The type of the entity or collection of entities returned by this property.",
                      "$ref": "#/definitions/structuralTypeName"
                  },
                  "isScalar": {
                      "description": "Whether this property returns a single entity (true) or an array of entities (false).",
                      "type": "boolean"
                  },
                  "associationName": {
                      "description": "An arbitrary name that is used to link this navigation property to its inverse property. For bidirectional navigations this name will occur twice within this document, otherwise only once.",
                      "type": "string"
                  },
                  "foreignKeyNames": {
                      "description": "An array of the names of the properties on this type that are the foreign key 'backing' for this navigation property.  This may only be set if 'isScalar' is true.",
                      "type": "array",
                      "items": { "type": "string"}
                  },
                  "foreignKeyNamesOnServer": {
                      "description": "Same as above, but the names here are server side names as opposed to client side.  Only one or the other is needed.",
                      "type": "array",
                      "items": { "type": "string" }
                  },
                  "validators": {
                      "description": "A list of the validators (validations) that will be associated with this property",
                      "type": "array",
                      "items": { "$ref": "#/definitions/validator" },
                      "uniqueItems": true
                  }
              },
              "required": ["entityTypeName", "isScalar", "associationName"]
          },
          "dataService": {
              "properties": {
                  "serviceName": {
                      "type": "string"
                  },
                  "adapterName": {
                      "description": "On deserialization, this must match the name of some 'dataService adapter' already registered on the breeze client.",
                      "type": "string"
                  },
                  "hasServerMetadata": {
                      "type": "boolean",
                      "default": true
                  },
                  "jsonResultsAdapter": {
                      "description": "On deserialization, this must match the name of some jsonResultsAdapter registered on the breeze client.",
                      "type": "string"
                  }
              },
              "required": ["serviceName"]
          },
          "validator": {
              "properties": {
                  "name": {
                      "description": "On deserialization, this must match the name of some validator already registered on the breeze client.",
                      "type": "string"
                  }
              },
              "additionalProperties": true,
              "required": ["name"]
          }
      }
  }

Metadata example:

{
  "metadataVersion": "1.0.5",
  "namingConvention": "camelCase2",
  "localQueryComparisonOptions": "caseInsensitiveSQL",
  "dataServices": [
    {
      "serviceName": "breeze/NorthwindIBModel/",
      "hasServerMetadata": true,
      "jsonResultsAdapter": "webApi_default",
      "useJsonp": false
    }
  ],
  "structuralTypes": [
    {
      "shortName": "Location",
      "namespace": "Foo",
      "isComplexType": true,
      "dataProperties": [
        {
          "name": "address",
          "dataType": "String",
          "maxLength": 60,
          "validators": [
            {
              "maxLength": 60,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "city",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "region",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "postalCode",
          "dataType": "String",
          "maxLength": 10,
          "validators": [
            {
              "maxLength": 10,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "country",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        }
      ]
    },
    {
      "shortName": "Category",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Categories",
      "dataProperties": [
        {
          "name": "categoryID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "categoryName",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "description",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "picture",
          "dataType": "Binary",
          "validators": [
            {
              "name": "none"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "products",
          "entityTypeName": "Product:#Foo",
          "isScalar": false,
          "associationName": "Category_Products",
          "invForeignKeyNames": [
            "categoryID"
          ]
        }
      ]
    },
    {
      "shortName": "Product",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Products",
      "dataProperties": [
        {
          "name": "productID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "productName",
          "dataType": "String",
          "maxLength": 40,
          "validators": [
            {
              "maxLength": 40,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "supplierID",
          "dataType": "Int32",
          "validators": [
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "categoryID",
          "dataType": "Int32",
          "validators": [
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "quantityPerUnit",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "unitPrice",
          "dataType": "Decimal",
          "validators": [
            {
              "name": "number"
            }
          ]
        },
        {
          "name": "unitsInStock",
          "dataType": "Int16",
          "validators": [
            {
              "min": -32768,
              "max": 32767,
              "name": "int16"
            }
          ]
        },
        {
          "name": "unitsOnOrder",
          "dataType": "Int16",
          "validators": [
            {
              "min": -32768,
              "max": 32767,
              "name": "int16"
            }
          ]
        },
        {
          "name": "reorderLevel",
          "dataType": "Int16",
          "validators": [
            {
              "min": -32768,
              "max": 32767,
              "name": "int16"
            }
          ]
        },
        {
          "name": "isDiscontinued",
          "dataType": "Boolean",
          "isNullable": false,
          "defaultValue": false,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "bool"
            }
          ]
        },
        {
          "name": "discontinuedDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "category",
          "entityTypeName": "Category:#Foo",
          "isScalar": true,
          "associationName": "Category_Products",
          "foreignKeyNames": [
            "categoryID"
          ]
        },
        {
          "name": "supplier",
          "entityTypeName": "Supplier:#Foo",
          "isScalar": true,
          "associationName": "Product_Supplier",
          "foreignKeyNames": [
            "supplierID"
          ]
        }
      ]
    },
    {
      "shortName": "Supplier",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Suppliers",
      "dataProperties": [
        {
          "name": "supplierID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "companyName",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 40,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 40,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "contactName",
          "dataType": "String",
          "maxLength": 30,
          "validators": [
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "contactTitle",
          "dataType": "String",
          "maxLength": 30,
          "validators": [
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "location",
          "complexTypeName": "Location:#Foo",
          "isNullable": false,
          "validators": [
            {
              "name": "required"
            }
          ]
        },
        {
          "name": "phone",
          "dataType": "String",
          "maxLength": 24,
          "validators": [
            {
              "maxLength": 24,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "fax",
          "dataType": "String",
          "maxLength": 24,
          "validators": [
            {
              "maxLength": 24,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "homePage",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "products",
          "entityTypeName": "Product:#Foo",
          "isScalar": false,
          "associationName": "Product_Supplier",
          "invForeignKeyNames": [
            "supplierID"
          ]
        }
      ]
    },
    {
      "shortName": "Comment",
      "namespace": "Foo",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "Comments",
      "dataProperties": [
        {
          "name": "createdOn",
          "dataType": "DateTime",
          "isNullable": false,
          "defaultValue": "1900-01-01T08:00:00.000Z",
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "seqNum",
          "dataType": "Byte",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": 0,
              "max": 255,
              "name": "byte"
            }
          ]
        },
        {
          "name": "comment1",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        }
      ]
    },
    {
      "shortName": "Customer",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Customers",
      "dataProperties": [
        {
          "name": "customerID",
          "dataType": "Guid",
          "isNullable": false,
          "defaultValue": "00000000-0000-0000-0000-000000000000",
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "guid"
            }
          ]
        },
        {
          "name": "customerID_OLD",
          "dataType": "String",
          "maxLength": 5,
          "validators": [
            {
              "maxLength": 5,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "companyName",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 40,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 40,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "contactName",
          "dataType": "String",
          "maxLength": 30,
          "validators": [
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "contactTitle",
          "dataType": "String",
          "maxLength": 30,
          "validators": [
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "address",
          "dataType": "String",
          "maxLength": 60,
          "validators": [
            {
              "maxLength": 60,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "city",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "region",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "postalCode",
          "dataType": "String",
          "maxLength": 10,
          "validators": [
            {
              "maxLength": 10,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "country",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "phone",
          "dataType": "String",
          "maxLength": 24,
          "validators": [
            {
              "maxLength": 24,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "fax",
          "dataType": "String",
          "maxLength": 24,
          "validators": [
            {
              "maxLength": 24,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "concurrencyMode": "Fixed",
          "validators": [
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "orders",
          "entityTypeName": "Order:#Foo",
          "isScalar": false,
          "associationName": "Customer_Orders",
          "invForeignKeyNames": [
            "customerID"
          ]
        }
      ]
    },
    {
      "shortName": "Order",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Orders",
      "dataProperties": [
        {
          "name": "orderID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "customerID",
          "dataType": "Guid",
          "validators": [
            {
              "name": "guid"
            }
          ]
        },
        {
          "name": "employeeID",
          "dataType": "Int32",
          "validators": [
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "orderDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "requiredDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "shippedDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "freight",
          "dataType": "Decimal",
          "validators": [
            {
              "name": "number"
            }
          ]
        },
        {
          "name": "shipName",
          "dataType": "String",
          "maxLength": 40,
          "validators": [
            {
              "maxLength": 40,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "shipAddress",
          "dataType": "String",
          "maxLength": 60,
          "validators": [
            {
              "maxLength": 60,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "shipCity",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "shipRegion",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "shipPostalCode",
          "dataType": "String",
          "maxLength": 10,
          "validators": [
            {
              "maxLength": 10,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "shipCountry",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "customer",
          "entityTypeName": "Customer:#Foo",
          "isScalar": true,
          "associationName": "Customer_Orders",
          "foreignKeyNames": [
            "customerID"
          ]
        },
        {
          "name": "employee",
          "entityTypeName": "Employee:#Foo",
          "isScalar": true,
          "associationName": "Employee_Orders",
          "foreignKeyNames": [
            "employeeID"
          ]
        },
        {
          "name": "internationalOrder",
          "entityTypeName": "InternationalOrder:#Foo",
          "isScalar": true,
          "associationName": "Order_InternationalOrder",
          "invForeignKeyNames": [
            "orderID"
          ]
        },
        {
          "name": "orderDetails",
          "entityTypeName": "OrderDetail:#Foo",
          "isScalar": false,
          "associationName": "OrderDetail_Order",
          "invForeignKeyNames": [
            "orderID"
          ]
        }
      ]
    },
    {
      "shortName": "Employee",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Employees",
      "dataProperties": [
        {
          "name": "employeeID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "lastName",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 30,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "firstName",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 30,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "title",
          "dataType": "String",
          "maxLength": 30,
          "validators": [
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "titleOfCourtesy",
          "dataType": "String",
          "maxLength": 25,
          "validators": [
            {
              "maxLength": 25,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "birthDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "hireDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "address",
          "dataType": "String",
          "maxLength": 60,
          "validators": [
            {
              "maxLength": 60,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "city",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "region",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "postalCode",
          "dataType": "String",
          "maxLength": 10,
          "validators": [
            {
              "maxLength": 10,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "country",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "homePhone",
          "dataType": "String",
          "maxLength": 24,
          "validators": [
            {
              "maxLength": 24,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "extension",
          "dataType": "String",
          "maxLength": 4,
          "validators": [
            {
              "maxLength": 4,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "photo",
          "dataType": "Binary",
          "validators": [
            {
              "name": "none"
            }
          ]
        },
        {
          "name": "notes",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "photoPath",
          "dataType": "String",
          "maxLength": 255,
          "validators": [
            {
              "maxLength": 255,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "reportsToEmployeeID",
          "dataType": "Int32",
          "validators": [
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "fullName",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "directReports",
          "entityTypeName": "Employee:#Foo",
          "isScalar": false,
          "associationName": "Employee_DirectReports",
          "invForeignKeyNames": [
            "reportsToEmployeeID"
          ]
        },
        {
          "name": "employeeTerritories",
          "entityTypeName": "EmployeeTerritory:#Foo",
          "isScalar": false,
          "associationName": "Employee_EmployeeTerritories",
          "invForeignKeyNames": [
            "employeeID"
          ]
        },
        {
          "name": "manager",
          "entityTypeName": "Employee:#Foo",
          "isScalar": true,
          "associationName": "Employee_DirectReports",
          "foreignKeyNames": [
            "reportsToEmployeeID"
          ]
        },
        {
          "name": "orders",
          "entityTypeName": "Order:#Foo",
          "isScalar": false,
          "associationName": "Employee_Orders",
          "invForeignKeyNames": [
            "employeeID"
          ]
        }
      ]
    },
    {
      "shortName": "EmployeeTerritory",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "EmployeeTerritories",
      "dataProperties": [
        {
          "name": "iD",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "employeeID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "territoryID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "employee",
          "entityTypeName": "Employee:#Foo",
          "isScalar": true,
          "associationName": "Employee_EmployeeTerritories",
          "foreignKeyNames": [
            "employeeID"
          ]
        },
        {
          "name": "territory",
          "entityTypeName": "Territory:#Foo",
          "isScalar": true,
          "associationName": "EmployeeTerritory_Territory",
          "foreignKeyNames": [
            "territoryID"
          ]
        }
      ]
    },
    {
      "shortName": "Territory",
      "namespace": "Foo",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "Territories",
      "dataProperties": [
        {
          "name": "territoryID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "territoryDescription",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 50,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 50,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "regionID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "employeeTerritories",
          "entityTypeName": "EmployeeTerritory:#Foo",
          "isScalar": false,
          "associationName": "EmployeeTerritory_Territory",
          "invForeignKeyNames": [
            "territoryID"
          ]
        },
        {
          "name": "region",
          "entityTypeName": "Region:#Foo",
          "isScalar": true,
          "associationName": "Region_Territories",
          "foreignKeyNames": [
            "regionID"
          ]
        }
      ]
    },
    {
      "shortName": "Region",
      "namespace": "Foo",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "Regions",
      "dataProperties": [
        {
          "name": "regionID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "regionDescription",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 50,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 50,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "territories",
          "entityTypeName": "Territory:#Foo",
          "isScalar": false,
          "associationName": "Region_Territories",
          "invForeignKeyNames": [
            "regionID"
          ]
        }
      ]
    },
    {
      "shortName": "InternationalOrder",
      "namespace": "Foo",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "InternationalOrders",
      "dataProperties": [
        {
          "name": "orderID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "customsDescription",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "exciseTax",
          "dataType": "Decimal",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "number"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "order",
          "entityTypeName": "Order:#Foo",
          "isScalar": true,
          "associationName": "Order_InternationalOrder",
          "foreignKeyNames": [
            "orderID"
          ]
        }
      ]
    },
    {
      "shortName": "OrderDetail",
      "namespace": "Foo",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "OrderDetails",
      "dataProperties": [
        {
          "name": "orderID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "productID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "unitPrice",
          "dataType": "Decimal",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "number"
            }
          ]
        },
        {
          "name": "quantity",
          "dataType": "Int16",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -32768,
              "max": 32767,
              "name": "int16"
            }
          ]
        },
        {
          "name": "discount",
          "dataType": "Single",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "number"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "order",
          "entityTypeName": "Order:#Foo",
          "isScalar": true,
          "associationName": "OrderDetail_Order",
          "foreignKeyNames": [
            "orderID"
          ]
        },
        {
          "name": "product",
          "entityTypeName": "Product:#Foo",
          "isScalar": true,
          "associationName": "OrderDetail_Product",
          "foreignKeyNames": [
            "productID"
          ]
        }
      ]
    },
    {
      "shortName": "Geospatial",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Geospatials",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "geometry1",
          "dataType": "Undefined",
          "validators": [
            {
              "name": "none"
            }
          ],
          "rawTypeName": "Edm.Geometry"
        },
        {
          "name": "geography1",
          "dataType": "Undefined",
          "validators": [
            {
              "name": "none"
            }
          ],
          "rawTypeName": "Edm.Geography"
        }
      ]
    },
    {
      "shortName": "PreviousEmployee",
      "namespace": "Foo",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "PreviousEmployees",
      "dataProperties": [
        {
          "name": "employeeID",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "lastName",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 20,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 20,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "firstName",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 10,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 10,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "title",
          "dataType": "String",
          "maxLength": 30,
          "validators": [
            {
              "maxLength": 30,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "titleOfCourtesy",
          "dataType": "String",
          "maxLength": 25,
          "validators": [
            {
              "maxLength": 25,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "birthDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "hireDate",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "address",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "city",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "region",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "postalCode",
          "dataType": "String",
          "maxLength": 10,
          "validators": [
            {
              "maxLength": 10,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "country",
          "dataType": "String",
          "maxLength": 15,
          "validators": [
            {
              "maxLength": 15,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "homePhone",
          "dataType": "String",
          "maxLength": 24,
          "validators": [
            {
              "maxLength": 24,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "extension",
          "dataType": "String",
          "maxLength": 4,
          "validators": [
            {
              "maxLength": 4,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "photo",
          "dataType": "Binary",
          "validators": [
            {
              "name": "none"
            }
          ]
        },
        {
          "name": "notes",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        },
        {
          "name": "photoPath",
          "dataType": "String",
          "maxLength": 255,
          "validators": [
            {
              "maxLength": 255,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ]
    },
    {
      "shortName": "Role",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Roles",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        },
        {
          "name": "name",
          "dataType": "String",
          "isNullable": false,
          "defaultValue": "",
          "maxLength": 50,
          "validators": [
            {
              "name": "required"
            },
            {
              "maxLength": 50,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "description",
          "dataType": "String",
          "maxLength": 2000,
          "validators": [
            {
              "maxLength": 2000,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "ts",
          "dataType": "Binary",
          "isNullable": false,
          "defaultValue": "AAAAAAAAJ3U=",
          "concurrencyMode": "Fixed",
          "maxLength": 8,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "none"
            }
          ]
        },
        {
          "name": "roleType",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ],
          "enumType": "Edm.Self.RoleType"
        }
      ],
      "navigationProperties": [
        {
          "name": "userRoles",
          "entityTypeName": "UserRole:#Foo",
          "isScalar": false,
          "associationName": "Role_UserRoles",
          "invForeignKeyNames": [
            "roleId"
          ]
        }
      ]
    },
    {
      "shortName": "UserRole",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "UserRoles",
      "dataProperties": [
        {
          "name": "iD",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        },
        {
          "name": "userId",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        },
        {
          "name": "roleId",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "role",
          "entityTypeName": "Role:#Foo",
          "isScalar": true,
          "associationName": "Role_UserRoles",
          "foreignKeyNames": [
            "roleId"
          ]
        },
        {
          "name": "user",
          "entityTypeName": "User:#Foo",
          "isScalar": true,
          "associationName": "UserRole_User",
          "foreignKeyNames": [
            "userId"
          ]
        }
      ]
    },
    {
      "shortName": "User",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Users",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        },
        {
          "name": "userName",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "userPassword",
          "dataType": "String",
          "maxLength": 200,
          "validators": [
            {
              "maxLength": 200,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "firstName",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "lastName",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "email",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "rowVersion",
          "dataType": "Decimal",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "number"
            }
          ]
        },
        {
          "name": "createdBy",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "createdByUserId",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        },
        {
          "name": "createdDate",
          "dataType": "DateTime",
          "isNullable": false,
          "defaultValue": "1900-01-01T08:00:00.000Z",
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "modifiedBy",
          "dataType": "String",
          "maxLength": 100,
          "validators": [
            {
              "maxLength": 100,
              "name": "maxLength"
            }
          ]
        },
        {
          "name": "modifiedByUserId",
          "dataType": "Int64",
          "isNullable": false,
          "defaultValue": 0,
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "integer"
            }
          ]
        },
        {
          "name": "modifiedDate",
          "dataType": "DateTime",
          "isNullable": false,
          "defaultValue": "1900-01-01T08:00:00.000Z",
          "concurrencyMode": "Fixed",
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "date"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "userRoles",
          "entityTypeName": "UserRole:#Foo",
          "isScalar": false,
          "associationName": "UserRole_User",
          "invForeignKeyNames": [
            "userId"
          ]
        }
      ]
    },
    {
      "shortName": "TimeGroup",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "TimeGroups",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "comment",
          "dataType": "String",
          "validators": [
            {
              "name": "string"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "timeLimits",
          "entityTypeName": "TimeLimit:#Foo",
          "isScalar": false,
          "associationName": "TimeGroup_TimeLimits",
          "invForeignKeyNames": [
            "timeGroupId"
          ]
        }
      ]
    },
    {
      "shortName": "TimeLimit",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "TimeLimits",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "maxTime",
          "dataType": "Time",
          "isNullable": false,
          "defaultValue": "PT0S",
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "duration"
            }
          ]
        },
        {
          "name": "minTime",
          "dataType": "Time",
          "validators": [
            {
              "name": "duration"
            }
          ]
        },
        {
          "name": "timeGroupId",
          "dataType": "Int32",
          "validators": [
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        }
      ],
      "navigationProperties": [
        {
          "name": "timeGroup",
          "entityTypeName": "TimeGroup:#Foo",
          "isScalar": true,
          "associationName": "TimeGroup_TimeLimits",
          "foreignKeyNames": [
            "timeGroupId"
          ]
        }
      ]
    },
    {
      "shortName": "UnusualDate",
      "namespace": "Foo",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "UnusualDates",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Int32",
          "isNullable": false,
          "defaultValue": 0,
          "isPartOfKey": true,
          "validators": [
            {
              "name": "required"
            },
            {
              "min": -2147483648,
              "max": 2147483647,
              "name": "int32"
            }
          ]
        },
        {
          "name": "creationDate",
          "dataType": "DateTimeOffset",
          "isNullable": false,
          "defaultValue": "1900-01-01T08:00:00.000Z",
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "modificationDate",
          "dataType": "DateTime",
          "isNullable": false,
          "defaultValue": "1900-01-01T08:00:00.000Z",
          "validators": [
            {
              "name": "required"
            },
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "creationDate2",
          "dataType": "DateTimeOffset",
          "validators": [
            {
              "name": "date"
            }
          ]
        },
        {
          "name": "modificationDate2",
          "dataType": "DateTime",
          "validators": [
            {
              "name": "date"
            }
          ]
        }
      ]
    }
  ],
  "resourceEntityTypeMap": {
    "Categories": "Category:#Foo",
    "Products": "Product:#Foo",
    "Suppliers": "Supplier:#Foo",
    "Comments": "Comment:#Foo",
    "Customers": "Customer:#Foo",
    "Orders": "Order:#Foo",
    "Employees": "Employee:#Foo",
    "EmployeeTerritories": "EmployeeTerritory:#Foo",
    "Territories": "Territory:#Foo",
    "Regions": "Region:#Foo",
    "InternationalOrders": "InternationalOrder:#Foo",
    "OrderDetails": "OrderDetail:#Foo",
    "Geospatials": "Geospatial:#Foo",
    "PreviousEmployees": "PreviousEmployee:#Foo",
    "Roles": "Role:#Foo",
    "UserRoles": "UserRole:#Foo",
    "Users": "User:#Foo",
    "TimeGroups": "TimeGroup:#Foo",
    "TimeLimits": "TimeLimit:#Foo",
    "UnusualDates": "UnusualDate:#Foo"
  }
}