/**
  * To add a Key/NonKey-primitive property to a resource (complex/entity)
  * 
  * @param ResourceType $resourceType   Resource type
  * @param string       $name           name of the property
  * @param TypeCode     $typeCode       type of property
  * @param boolean      $isKey          property is key or not
  * @param boolean      $isBag          property is bag or not
  * @param boolean      $isETagProperty property is etag or not
  * 
  * @return void
  */
 private function _addPrimitivePropertyInternal($resourceType, $name, $typeCode, $isKey = false, $isBag = false, $isETagProperty = false)
 {
     try {
         $resourceType->getInstanceType()->getProperty($name);
     } catch (ReflectionException $ex) {
         throw new InvalidOperationException('Can\'t add a property which does not exist on the instance type.');
     }
     $primitiveResourceType = null;
     try {
         $primitiveResourceType = ResourceType::getPrimitiveResourceType($typeCode);
     } catch (InvalidArgumentException $ex) {
         throw $ex;
     }
     if ($isETagProperty && $isBag) {
         throw new InvalidOperationException('Only primitve property can be etag property, bag property cannot be etag property');
     }
     $kind = $isKey ? ResourcePropertyKind::PRIMITIVE | ResourcePropertyKind::KEY : ResourcePropertyKind::PRIMITIVE;
     if ($isBag) {
         $kind = $kind | ResourcePropertyKind::BAG;
     }
     if ($isETagProperty) {
         $kind = $kind | ResourcePropertyKind::ETAG;
     }
     $resourceProperty = new ResourceProperty($name, null, $kind, $primitiveResourceType);
     $resourceType->addProperty($resourceProperty);
 }
 private function _getOrderResourceType()
 {
     $orderResType = new ResourceType(new ReflectionClass('Order2'), ResourceTypeKind::ENTITY, 'Order', 'Northwind');
     $intResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::INT32);
     $orderIDPrimProperty = new ResourceProperty('OrderID', null, ResourcePropertyKind::PRIMITIVE | ResourcePropertyKind::KEY, $intResourceType);
     $dateTimeResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::DATETIME);
     $orderDatePrimProperty = new ResourceProperty('OrderDate', null, ResourcePropertyKind::PRIMITIVE, $dateTimeResourceType);
     $stringResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::STRING);
     $orderShipNamePrimProperty = new ResourceProperty('ShipName', null, ResourcePropertyKind::PRIMITIVE, $stringResourceType);
     $orderResType->addProperty($orderIDPrimProperty);
     $orderResType->addProperty($orderDatePrimProperty);
     $orderResType->addProperty($orderShipNamePrimProperty);
     return $orderResType;
 }