diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
index e51b1e1..a8abdbd 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
@@ -122,7 +122,7 @@ public function cacheSet($type) {
         break;
       case 'results':
         $data = array(
-          'result' => $this->view->result,
+          'result' => $this->prepareViewResult($this->view->result),
           'total_rows' => isset($this->view->total_rows) ? $this->view->total_rows : 0,
           'current_page' => $this->view->getCurrentPage(),
         );
@@ -137,6 +137,25 @@ public function cacheSet($type) {
   }
 
   /**
+   * Prepare the view result before putting it into cache.
+   *
+   * @param \Drupal\views\ResultRow[] $result
+   *   The result containing loaded entities.
+   *
+   * @return \Drupal\views\ResultRow[] $result
+   *   The result without loaded entities.
+   */
+  protected function prepareViewResult(array $result) {
+    $return = array();
+    foreach ($result as $key => $row) {
+      $clone = clone $row;
+      unset($clone->_entity, $clone->_relationship_entities);
+      $return[$key] = $clone;
+    }
+    return $return;
+  }
+
+  /**
    * Retrieve data from the cache.
    *
    * A plugin should override this to provide specialized caching behavior.
@@ -153,6 +172,7 @@ public function cacheGet($type) {
         if ($cache = \Drupal::cache($this->table)->get($this->generateResultsKey())) {
           if (!$cutoff || $cache->created > $cutoff) {
             $this->view->result = $cache->data['result'];
+            $this->view->query->loadEntities($this->view->result);
             $this->view->total_rows = $cache->data['total_rows'];
             $this->view->setCurrentPage($cache->data['current_page']);
             $this->view->execute_time = 0;
