code: function EntityKey(entityType, keyValues) {
      assertParam(entityType, "entityType").isInstanceOf(EntityType).check();
      var subtypes = entityType.getSelfAndSubtypes();
      if (subtypes.length > 1) {
        this._subtypes = subtypes.filter(function (st) {
          return st.isAbstract === false;
        });
      }
  
      if (!Array.isArray(keyValues)) {
        keyValues = __arraySlice(arguments, 1);
      }
  
      this.entityType = entityType;
      entityType.keyProperties.forEach(function (kp, i) {
        // insure that guid keys are comparable.
        if (kp.dataType === DataType.Guid) {
          keyValues[i] = keyValues[i] && keyValues[i].toLowerCase();
        }
      });
  
      this.values = keyValues;
      this._keyInGroup = createKeyString(keyValues);
  
    }
docs: An EntityKey is an object that represents the unique identity of an entity.  EntityKey's are immutable.
  
  @class EntityKey
   
  Constructs a new EntityKey.  Each entity within an EntityManager will have a unique EntityKey.
  @example
  assume em1 is an EntityManager containing a number of existing entities.
  var empType = em1.metadataStore.getEntityType("Employee");
  var entityKey = new EntityKey(empType, 1);
  EntityKey's may also be found by calling EntityAspect.getKey()
  @example
  assume employee1 is an existing Employee entity
  var empKey = employee1.entityAspect.getKey();
  Multipart keys are created by passing an array as the 'keyValues' parameter
  @example
  var empTerrType = em1.metadataStore.getEntityType("EmployeeTerritory");
  var empTerrKey = new EntityKey(empTerrType, [ 1, 77]);
  The order of the properties in the 'keyValues' array must be the same as that
  returned by empTerrType.keyProperties
  @method <ctor> EntityKey
  @param entityType {EntityType} The {{#crossLink "EntityType"}}{{/crossLink}} of the entity.
  @param keyValues {value|Array of values} A single value or an array of values.