diff --git a/core/modules/views/src/Entity/Render/RendererBase.php b/core/modules/views/src/Entity/Render/RendererBase.php
index be8aea6..feca3ae 100644
--- a/core/modules/views/src/Entity/Render/RendererBase.php
+++ b/core/modules/views/src/Entity/Render/RendererBase.php
@@ -85,15 +85,17 @@ public function query(QueryPluginBase $query) {
   /**
    * Runs before each row is rendered.
    *
-   * @param $result
+   * @param array $result
    *   The full array of results from the query.
+   * @param string $relationship
+   *   The relationship to be used, or 'none' by default.
    */
-  public function preRender(array $result) {
+  public function preRender(array $result, $relationship = 'none') {
     $view_builder = $this->view->rowPlugin->entityManager->getViewBuilder($this->entityType->id());
 
     /** @var \Drupal\views\ResultRow $row */
     foreach ($result as $row) {
-      $entity = $row->_entity;
+      $entity = $relationship === 'none' ? $row->_entity : $row->_relationship_entities[$relationship];
       $entity->view = $this->view;
       $this->build[$entity->id()] = $view_builder->view($entity, $this->view->rowPlugin->options['view_mode'], $this->getLangcode($row));
     }
diff --git a/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php b/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php
index 58c8ff0..4548511 100644
--- a/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php
+++ b/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php
@@ -47,12 +47,12 @@ public function query(QueryPluginBase $query) {
   /**
    * {@inheritdoc}
    */
-  public function preRender(array $result) {
+  public function preRender(array $result, $relationship = 'none') {
     $view_builder = $this->view->rowPlugin->entityManager->getViewBuilder($this->entityType->id());
 
     /** @var \Drupal\views\ResultRow $row */
     foreach ($result as $row) {
-      $entity = $row->_entity;
+      $entity = $relationship === 'none' ? $row->_entity : $row->_relationship_entities[$relationship];
       $entity->view = $this->view;
       $langcode = $this->getLangcode($row);
       $this->build[$entity->id()][$langcode] = $view_builder->view($entity, $this->view->rowPlugin->options['view_mode'], $this->getLangcode($row));
diff --git a/core/modules/views/src/Plugin/views/row/EntityRow.php b/core/modules/views/src/Plugin/views/row/EntityRow.php
index a0df1e1..f29b329 100644
--- a/core/modules/views/src/Plugin/views/row/EntityRow.php
+++ b/core/modules/views/src/Plugin/views/row/EntityRow.php
@@ -181,7 +181,7 @@ public function query() {
   public function preRender($result) {
     parent::preRender($result);
     if ($result) {
-      $this->getEntityTranslationRenderer()->preRender($result);
+      $this->getEntityTranslationRenderer()->preRender($result, $this->options['relationship']);
     }
   }
 
diff --git a/core/modules/views/src/Plugin/views/row/RowPluginBase.php b/core/modules/views/src/Plugin/views/row/RowPluginBase.php
index 059a415..9c84f8e 100644
--- a/core/modules/views/src/Plugin/views/row/RowPluginBase.php
+++ b/core/modules/views/src/Plugin/views/row/RowPluginBase.php
@@ -96,7 +96,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         $data = Views::viewsData()->get($relationship['table']);
         $base = $data[$relationship['field']]['relationship']['base'];
         if ($base == $this->base_table) {
-          $relationship_handler->init($executable, $relationship);
+          $relationship_handler->init($executable, $this->displayHandler, $relationship);
           $relationship_options[$relationship['id']] = $relationship_handler->adminLabel();
         }
       }
diff --git a/core/modules/views/src/Tests/Plugin/EntityRowTest.php b/core/modules/views/src/Tests/Plugin/EntityRowTest.php
new file mode 100644
index 0000000..15bc52e
--- /dev/null
+++ b/core/modules/views/src/Tests/Plugin/EntityRowTest.php
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\Plugin\EntityRowTest.
+ */
+
+namespace Drupal\views\Tests\Plugin;
+
+use Drupal\Core\Form\FormState;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\user\Entity\User;
+use Drupal\views\Views;
+use Drupal\views\Tests\ViewUnitTestBase;
+
+/**
+ * Tests the generic entity row plugin.
+ *
+ * @group views
+ * @see \Drupal\views\Plugin\views\row\EntityRow
+ */
+class EntityRowTest extends ViewUnitTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['entity_test', 'field', 'entity', 'system', 'user'];
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_entity_row');
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('entity_test');
+    $this->installEntitySchema('user');
+  }
+
+  /**
+   * Tests the entity row handler.
+   */
+  public function testEntityRow() {
+    $user = User::create([
+      'name' => 'test user',
+    ]);
+    $user->save();
+
+    $entity_test = EntityTest::create([
+      'user_id' => $user->id(),
+      'name' => 'test entity test',
+    ]);
+    $entity_test->save();
+
+    $view = Views::getView('test_entity_row');
+    $build = $view->preview();
+    $this->render($build);
+
+    $this->assertText('test entity test');
+    $this->assertNoText('Member for');
+
+    // Change the view to use a relationship to render the row.
+    $view = Views::getView('test_entity_row');
+    $display = &$view->storage->getDisplay('default');
+    $display['display_options']['row']['type'] = 'entity:user';
+    $display['display_options']['row']['options']['relationship'] = 'user_id';
+    $view->setDisplay('default');
+    $build = $view->preview();
+    $this->render($build);
+
+    $this->assertNoText('test entity test');
+    $this->assertText('Member for');
+
+    // Tests the available view mode options.
+    $form = array();
+    $form_state = new FormState();
+    $form_state->set('view', $view->storage);
+    $view->rowPlugin->buildOptionsForm($form, $form_state);
+
+    $this->assertTrue(isset($form['view_mode']['#options']['default']), 'Ensure that the default view mode is available');
+  }
+
+}
diff --git a/core/modules/views/src/Tests/Plugin/RowEntityTest.php b/core/modules/views/src/Tests/Plugin/RowEntityTest.php
deleted file mode 100644
index 35bd1e2..0000000
--- a/core/modules/views/src/Tests/Plugin/RowEntityTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\views\Tests\Plugin\RowEntityTest.
- */
-
-namespace Drupal\views\Tests\Plugin;
-
-use Drupal\Core\Form\FormState;
-use Drupal\views\Views;
-use Drupal\views\Tests\ViewUnitTestBase;
-
-/**
- * Tests the generic entity row plugin.
- *
- * @group views
- * @see \Drupal\views\Plugin\views\row\EntityRow
- */
-class RowEntityTest extends ViewUnitTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['taxonomy', 'text', 'filter', 'field', 'entity', 'system', 'node', 'user'];
-
-  /**
-   * Views used by this test.
-   *
-   * @var array
-   */
-  public static $testViews = array('test_entity_row');
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->installEntitySchema('taxonomy_term');
-    $this->installConfig(array('taxonomy'));
-    \Drupal::service('router.builder')->rebuild();
-  }
-
-  /**
-   * Tests the entity row handler.
-   */
-  public function testEntityRow() {
-    $vocab = entity_create('taxonomy_vocabulary', array('name' => $this->randomMachineName(), 'vid' => strtolower($this->randomMachineName())));
-    $vocab->save();
-    $term = entity_create('taxonomy_term', array('name' => $this->randomMachineName(), 'vid' => $vocab->id() ));
-    $term->save();
-
-    $view = Views::getView('test_entity_row');
-    $build = $view->preview();
-    $this->render($build);
-
-    $this->assertText($term->getName(), 'The rendered entity appears as row in the view.');
-
-    // Tests the available view mode options.
-    $form = array();
-    $form_state = new FormState();
-    $form_state->set('view', $view->storage);
-    $view->rowPlugin->buildOptionsForm($form, $form_state);
-
-    $this->assertTrue(isset($form['view_mode']['#options']['default']), 'Ensure that the default view mode is available');
-  }
-
-}
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_row.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_row.yml
index ad9f748..c786e20 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_row.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_row.yml
@@ -6,8 +6,8 @@ label: ''
 module: views
 description: ''
 tag: ''
-base_table: taxonomy_term_field_data
-base_field: nid
+base_table: entity_test
+base_field: id
 core: '8'
 display:
   default:
@@ -21,10 +21,17 @@ display:
           offset: 0
         type: none
       row:
-        type: 'entity:taxonomy_term'
+        type: 'entity:entity_test'
         options:
           relationship: none
           view_mode: full
+      relationships:
+        user_id:
+          table: entity_test
+          field: user_id
+          id: user_id
+          relationship: none
+          plugin_id: standard
     display_plugin: default
     display_title: Master
     id: default
