protected function _drillDownAssoc(EntityInterface $entity, $object, array $parts)
    {
        $assocName = array_shift($parts);
        $prop = $object->{$assocName}->getProperty();
        $associated = $entity->{$prop};

        if (empty($associated) || $object->{$assocName} instanceof BelongsTo) {
            return;
        }

        if ($associated instanceof EntityInterface) {
            if (!empty($parts)) {
                $this->_drillDownAssoc($associated, $object->{$assocName}, $parts);
            }

            if (!$associated->isNew()) {
                $this->_modifyEntity($associated, $object->{$assocName});
            }

            return;
        }

        foreach ($associated as $e) {
            if (!empty($parts)) {
                $this->_drillDownAssoc($e, $object->{$assocName}, $parts);
            }

            if (!$e->isNew()) {
                $this->_modifyEntity($e, $object->{$assocName});
            }
        }
    }