public function load($keys = null, $reset = true)
    {
        // Event
        $this->triggerEvent(
            'onBefore' . ucfirst(__FUNCTION__),
            [
                'conditions' => &$keys,
                'reset' => &$reset,
            ]
        );

        if ($reset) {
            $this->reset();
        }

        // If keys empty, use inner values as keys.
        if (empty($keys)) {
            $empty = true;
            $keys = [];

            // If empty, use the value of the current key
            foreach ($this->keys as $key) {
                $empty = $empty && empty($this->$key);
                $keys[$key] = $this->$key;
            }

            // If empty primary key there's is no need to load anything
            if ($empty) {
                return $this;
            }
        }

        $result = $this->getDataMapper()->findOne($keys);

        // Check that we have a result.
        if ($result->isNull()) {
            throw new NoResultException('No result.');
        }

        // Bind the object with the row and return.
        $row = $this->bind($result);

        // Event
        $this->triggerEvent(
            'onAfter' . ucfirst(__FUNCTION__),
            [
                'result' => &$row,
            ]
        );

        return $row;
    }