anchor.diff:  
     ManagedPropertyDescription get joinProperty =>
         (property as ManagedRelationshipDescription).inverseRelationship;
  -  QueryPredicate predicate;
  -  List<PropertyToColumnMapper> orderedMappingElements;
   
     List<PropertyToColumnMapper> get flattened {
       return orderedMappingElements.expand((c) {
  
positive.code:   }
  }
  
  /// This class is used internally.
  class PropertyToRowMapping extends PropertyToColumnMapper {
    PropertyToRowMapping(this.type, ManagedPropertyDescription property,
        this.predicate, this.orderedMappingElements)
        : super(property) {}
  
    PersistentJoinType type;
  
    String get columnName {
      ManagedRelationshipDescription p = property;
  
negative.code:       keys.insert(0, entity.primaryKey);
      }
  
      return keys
          .map((key) => new PropertyToColumnMapper(propertyForName(entity, key)))
          .toList();
    }
  
    static ManagedPropertyDescription propertyForName(
        ManagedEntity entity, String propertyName) {
      var property = entity.properties[propertyName];
  
      if (property == null) {
        throw new QueryException(QueryExceptionEvent.internalFailure,
            message:
                "Property $propertyName does not exist on ${entity.tableName}");
      }
  
      if (property is ManagedRelationshipDescription &&
          property.relationshipType != ManagedRelationshipType.belongsTo) {
        throw new QueryException(QueryExceptionEvent.internalFailure,
            message:
                "Property $propertyName is a hasMany or hasOne relationship and is invalid as a result property of "
                "${entity.tableName}, use matchOn.$propertyName.includeInResultSet = true instead.");
      }
  
      return property;
  