1. @override
void readFromMap(Map<String, dynamic> keyValues)

Populates the properties of a this instance from a map.

This method will thrown an exception if a key in the map does not match a property of the receiver.

Usage: var values = JSON.decode(requestBody); var user = new User() ..readFromMap(values);

Source

@override
void readFromMap(Map<String, dynamic> keyValues) {
  var mirror = reflect(this);

  keyValues.forEach((k, v) {
    var property = entity.properties[k];

    if (property == null) {
      throw new QueryException(QueryExceptionEvent.requestFailure,
          message:
              "Key $k does not exist for ${MirrorSystem.getName(mirror.type.simpleName)}");
    }

    if (property is ManagedAttributeDescription) {
      if (!property.isTransient) {
        backing.setValueForProperty(entity, k, property.convertFromPrimitiveValue(v));
      } else {
        if (!property.transientStatus.isAvailableAsInput) {
          throw new QueryException(QueryExceptionEvent.requestFailure,
              message:
                  "Key $k does not exist for ${MirrorSystem.getName(mirror.type.simpleName)}");
        }

        var decodedValue = property.convertFromPrimitiveValue(v);
        if (!property.isAssignableWith(decodedValue)) {
          var valueTypeName =
              MirrorSystem.getName(reflect(decodedValue).type.simpleName);
          throw new QueryException(QueryExceptionEvent.requestFailure,
              message:
                  "Type mismatch for property ${property.name} on ${MirrorSystem.getName(entity.persistentType.simpleName)}, expected assignable type matching ${property.type} but got $valueTypeName.");
        }

        mirror.setField(new Symbol(k), decodedValue);
      }
    } else {
      backing.setValueForProperty(entity, k, property.convertFromPrimitiveValue(v));
    }
  });
}