diff --git a/core/modules/comment/comment.info.yml b/core/modules/comment/comment.info.yml
index ea529a4..bf78d50 100644
--- a/core/modules/comment/comment.info.yml
+++ b/core/modules/comment/comment.info.yml
@@ -6,4 +6,5 @@ version: VERSION
 core: 8.x
 dependencies:
   - text
+  - entity_reference
 configure: comment.admin
diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install
index 327feff..455b510 100644
--- a/core/modules/comment/comment.install
+++ b/core/modules/comment/comment.install
@@ -39,10 +39,10 @@ function comment_schema() {
     'description' => 'Maintains statistics of entity and comments posts to show "new" and "updated" flags.',
     'fields' => array(
       'entity_id' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
+        'type' => 'varchar_ascii',
         'not null' => TRUE,
-        'default' => 0,
+        'default' => '0',
+        'length' => 255,
         'description' => 'The entity_id of the entity for which the statistics are compiled.',
       ),
       'entity_type' => array(
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 319067d..0765534 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -26,6 +26,7 @@
 use Drupal\Core\Render\Element;
 use Drupal\Core\Url;
 use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field\Entity\FieldConfig;
 use Drupal\field\FieldConfigInterface;
 use Drupal\field\FieldStorageConfigInterface;
 use Drupal\file\FileInterface;
@@ -170,19 +171,6 @@ function comment_field_config_update(FieldConfigInterface $field) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_insert() for 'field_storage_config'.
- */
-function comment_field_storage_config_insert(FieldStorageConfigInterface $field_storage) {
-  if ($field_storage->getType() == 'comment') {
-    // Check that the target entity type uses an integer ID.
-    $entity_type_id = $field_storage->getTargetEntityTypeId();
-    if (!_comment_entity_uses_integer_id($entity_type_id)) {
-      throw new \UnexpectedValueException('You cannot attach a comment field to an entity with a non-integer ID field');
-    }
-  }
-}
-
-/**
  * Implements hook_ENTITY_TYPE_delete() for 'field_config'.
  */
 function comment_field_config_delete(FieldConfigInterface $field) {
@@ -291,10 +279,6 @@ function comment_form_field_ui_field_storage_add_form_alter(&$form, FormStateInt
   if ($form_state->get('entity_type_id') == 'comment' && $route_match->getParameter('commented_entity_type')) {
     $form['#title'] = \Drupal::service('comment.manager')->getFieldUIPageTitle($route_match->getParameter('commented_entity_type'), $route_match->getParameter('field_name'));
   }
-  if (!_comment_entity_uses_integer_id($form_state->get('entity_type_id'))) {
-    // You cannot use comment fields on entity types with non-integer IDs.
-    unset($form['add']['new_storage_type']['#options'][t('General')]['comment']);
-  }
 }
 
 /**
@@ -376,15 +360,9 @@ function comment_entity_insert(EntityInterface $entity) {
  * Implements hook_entity_predelete().
  */
 function comment_entity_predelete(EntityInterface $entity) {
-  // Entities can have non-numeric IDs, but {comment} and
-  // {comment_entity_statistics} tables have integer columns for entity ID, and
-  // PostgreSQL throws exceptions if you attempt query conditions with
-  // mismatched types. So, we need to verify that the ID is numeric (even for an
-  // entity type that has an integer ID, $entity->id() might be a string
-  // containing a number), and then cast it to an integer when querying.
-  if ($entity instanceof FieldableEntityInterface && is_numeric($entity->id())) {
+  if ($entity instanceof FieldableEntityInterface && FieldStorageConfig::loadByName('comment', 'commented_' . $entity->getEntityTypeId())) {
     $entity_query = \Drupal::entityQuery('comment');
-    $entity_query->condition('entity_id', (int) $entity->id());
+    $entity_query->condition('commented_' . $entity->getEntityTypeId() . '.target_id', $entity->id());
     $entity_query->condition('entity_type', $entity->getEntityTypeId());
     $cids = $entity_query->execute();
     entity_delete_multiple('comment', $cids);
@@ -393,27 +371,6 @@ function comment_entity_predelete(EntityInterface $entity) {
 }
 
 /**
- * Determines if an entity type is using an integer-based ID definition.
- *
- * @param string $entity_type_id
- *   The ID the represents the entity type.
- *
- * @return bool
- *   Returns TRUE if the entity type has an integer-based ID definition and
- *   FALSE otherwise.
- */
-function _comment_entity_uses_integer_id($entity_type_id) {
-  $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
-  $entity_type_id_key = $entity_type->getKey('id');
-  if ($entity_type_id_key === FALSE) {
-    return FALSE;
-  }
-  $field_definitions = \Drupal::entityManager()->getBaseFieldDefinitions($entity_type->id());
-  $entity_type_id_definition = $field_definitions[$entity_type_id_key];
-  return $entity_type_id_definition->getType() === 'integer';
-}
-
-/**
  * Implements hook_node_update_index().
  */
 function comment_node_update_index(EntityInterface $node, $langcode) {
diff --git a/core/modules/comment/comment.views.inc b/core/modules/comment/comment.views.inc
index 5e31876..2cfd032 100644
--- a/core/modules/comment/comment.views.inc
+++ b/core/modules/comment/comment.views.inc
@@ -63,31 +63,6 @@ function comment_views_data_alter(&$data) {
           'entity_id' => $entity_type->getKey('id'),
         ),
       );
-
-      foreach ($fields as $field_name => $field) {
-        $data[$base_table][$field_name . '_cid'] = array(
-          'title' => t('Comments of the @entity_type using field: @field_name', $args + array('@field_name' => $field_name)),
-          'help' => t('Relate all comments on the @entity_type. This will create 1 duplicate record for every comment. Usually if you need this it is better to create a comment view.', $args),
-          'relationship' => array(
-            'group' => t('Comment'),
-            'label' => t('Comments'),
-            'base' => 'comment_field_data',
-            'base field' => 'entity_id',
-            'relationship field' => $entity_type->getKey('id'),
-            'id' => 'standard',
-            'extra' => array(
-              array(
-                'field' => 'entity_type',
-                'value' => $entity_type_id,
-              ),
-              array(
-                'field' => 'field_name',
-                'value' => $field_name,
-              ),
-            ),
-          ),
-        );
-      }
     }
   }
 }
diff --git a/core/modules/comment/config/optional/views.view.comments_recent.yml b/core/modules/comment/config/optional/views.view.comments_recent.yml
index 6f9c5cd..611e417 100644
--- a/core/modules/comment/config/optional/views.view.comments_recent.yml
+++ b/core/modules/comment/config/optional/views.view.comments_recent.yml
@@ -53,10 +53,13 @@ display:
           separator: ' '
           hide_empty: false
       relationships:
-        node:
-          field: node
-          id: node
-          table: comment_field_data
+        commented_node:
+          id: commented_node
+          table: comment__commented_node
+          field: commented_node
+          relationship: none
+          group_type: group
+          admin_label: 'commented_node: Content'
           required: true
           plugin_id: standard
       fields:
@@ -181,15 +184,41 @@ display:
           entity_type: comment
           entity_field: status
         status_node:
-          value: true
+          id: status_node
           table: node_field_data
           field: status
-          relationship: node
-          id: status_node
-          plugin_id: boolean
+          relationship: commented_node
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: true
+          group: 1
+          exposed: false
           expose:
+            operator_id: ''
+            label: ''
+            description: ''
+            use_operator: false
             operator: ''
-          group: 1
+            identifier: ''
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          plugin_id: boolean
           entity_type: node
           entity_field: status
       sorts:
diff --git a/core/modules/comment/src/CommentAccessControlHandler.php b/core/modules/comment/src/CommentAccessControlHandler.php
index 405b1d2..5c336a6 100644
--- a/core/modules/comment/src/CommentAccessControlHandler.php
+++ b/core/modules/comment/src/CommentAccessControlHandler.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\comment\Entity\CommentType;
 
 /**
  * Defines the access control handler for the comment entity type.
@@ -76,7 +77,8 @@ protected function checkFieldAccess($operation, FieldDefinitionInterface $field_
       if (in_array($field_definition->getName(), $administrative_fields, TRUE)) {
         return AccessResult::allowedIfHasPermission($account, 'administer comments');
       }
-
+      /** @var \Drupal\comment\CommentInterface $entity */
+      $entity = $items->getEntity();
       // No user can change read-only fields.
       $read_only_fields = array(
         'hostname',
@@ -85,7 +87,7 @@ protected function checkFieldAccess($operation, FieldDefinitionInterface $field_
         'thread',
         'comment_type',
         'pid',
-        'entity_id',
+        CommentType::load($entity->bundle())->getEntityReferenceFieldName(),
         'entity_type',
         'field_name',
       );
@@ -104,8 +106,6 @@ protected function checkFieldAccess($operation, FieldDefinitionInterface $field_
           // access.
           return AccessResult::forbidden();
         }
-        /** @var \Drupal\comment\CommentInterface $entity */
-        $entity = $items->getEntity();
         $commented_entity = $entity->getCommentedEntity();
         $anonymous_contact = $commented_entity->get($entity->getFieldName())->getFieldDefinition()->getSetting('anonymous');
         $admin_access = AccessResult::allowedIfHasPermission($account, 'administer comments');
diff --git a/core/modules/comment/src/CommentLazyBuilders.php b/core/modules/comment/src/CommentLazyBuilders.php
index 9d74881..3c8a44a 100644
--- a/core/modules/comment/src/CommentLazyBuilders.php
+++ b/core/modules/comment/src/CommentLazyBuilders.php
@@ -106,7 +106,7 @@ public function __construct(EntityManagerInterface $entity_manager, EntityFormBu
   public function renderForm($commented_entity_type_id, $commented_entity_id, $field_name, $comment_type_id) {
     $values = array(
       'entity_type' => $commented_entity_type_id,
-      'entity_id' => $commented_entity_id,
+      'commented_' . $commented_entity_type_id => $commented_entity_id,
       'field_name' => $field_name,
       'comment_type' => $comment_type_id,
       'pid' => NULL,
diff --git a/core/modules/comment/src/CommentManager.php b/core/modules/comment/src/CommentManager.php
index d331a2b..e94bc0d 100644
--- a/core/modules/comment/src/CommentManager.php
+++ b/core/modules/comment/src/CommentManager.php
@@ -8,6 +8,7 @@
 namespace Drupal\comment;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+use Drupal\comment\Entity\CommentType;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -148,6 +149,67 @@ public function addBodyField($comment_type_id) {
   /**
    * {@inheritdoc}
    */
+  public function addEntityField($comment_type_id) {
+    $comment_type = CommentType::load($comment_type_id);
+    $field_name = $comment_type->getEntityReferenceFieldName();
+    $field_storage = FieldStorageConfig::loadByName('comment', $field_name);
+    if (!$field_storage) {
+      $field_storage = FieldStorageConfig::create([
+        'langcode' => 'en',
+        'status' => TRUE,
+        'dependencies' => [
+          'module' => ['comment', 'entity_reference'],
+        ],
+        'id' => 'comment.' . $field_name,
+        'field_name' => $field_name,
+        'entity_type' => 'comment',
+        'type' => 'entity_reference',
+        'settings' => [
+          'target_type' => $comment_type->getTargetEntityTypeId(),
+          'handler_settings' => array(),
+          'handler' => 'default:' . $comment_type->getTargetEntityTypeId(),
+        ],
+        'module' => 'entity_reference',
+        'locked' => TRUE,
+        'cardinality' => 1,
+        'translatable' => FALSE,
+        'indexes' => [],
+        'persist_with_no_fields' => TRUE,
+      ]);
+      $field_storage->save();
+    }
+    if (!FieldConfig::loadByName('comment', $comment_type_id, $field_name)) {
+      $target_entity_type = $this->entityManager->getDefinition($comment_type->getTargetEntityTypeId());
+      $comment_type = CommentType::load($comment_type_id);
+      // Attaches the body field by default.
+      $field = $this->entityManager->getStorage('field_config')->create(array(
+        'label' => 'Commented ' . $target_entity_type->getLabel(),
+        'bundle' => $comment_type_id,
+        'required' => TRUE,
+        'field_storage' => $field_storage,
+        'settings' => array(
+          'target_type' => $comment_type->getTargetEntityTypeId(),
+          'handler_settings' => array(),
+          'handler' => 'default:' . $comment_type->getTargetEntityTypeId(),
+        ),
+      ));
+      $field->save();
+
+      // Assign widget settings for the 'default' form mode.
+      entity_get_form_display('comment', $comment_type_id, 'default')
+        ->removeComponent($field_name)
+        ->save();
+
+      // Assign display settings for the 'default' view mode.
+      entity_get_display('comment', $comment_type_id, 'default')
+        ->removeComponent($field_name)
+        ->save();
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function forbiddenMessage(EntityInterface $entity, $field_name) {
     if (!isset($this->authenticatedCanPostComments)) {
       // We only output a link if we are certain that users will get the
@@ -219,7 +281,7 @@ public function getCountNewComments(EntityInterface $entity, $field_name = NULL,
       // Use the timestamp to retrieve the number of new comments.
       $query = $this->queryFactory->get('comment')
         ->condition('entity_type', $entity->getEntityTypeId())
-        ->condition('entity_id', $entity->id())
+        ->condition('commented_' . $entity->getEntityTypeId() . '.target_id', $entity->id())
         ->condition('created', $timestamp, '>')
         ->condition('status', CommentInterface::PUBLISHED);
       if ($field_name) {
diff --git a/core/modules/comment/src/CommentManagerInterface.php b/core/modules/comment/src/CommentManagerInterface.php
index 2c9a531..476ff19 100644
--- a/core/modules/comment/src/CommentManagerInterface.php
+++ b/core/modules/comment/src/CommentManagerInterface.php
@@ -52,6 +52,14 @@ public function getFields($entity_type_id);
   public function addBodyField($comment_type);
 
   /**
+   * Creates a commented_entity field.
+   *
+   * @param string $comment_type
+   *   The comment bundle.
+   */
+  public function addEntityField($comment_type);
+
+  /**
    * Provides a message if posting comments is forbidden.
    *
    * If authenticated users can post comments, a message is returned that
diff --git a/core/modules/comment/src/CommentStatistics.php b/core/modules/comment/src/CommentStatistics.php
index c37641c..f195988 100644
--- a/core/modules/comment/src/CommentStatistics.php
+++ b/core/modules/comment/src/CommentStatistics.php
@@ -15,6 +15,7 @@
 use Drupal\Core\State\StateInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\user\EntityOwnerInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 
 class CommentStatistics implements CommentStatisticsInterface {
 
@@ -188,10 +189,14 @@ public function update(CommentInterface $comment) {
     if (!$this->state->get('comment.maintain_entity_statistics')) {
       return;
     }
-
+    $field_storage = FieldStorageConfig::loadByName('comment', $this->entityManager->getStorage('comment_type')->load($comment->bundle())->getEntityReferenceFieldName());
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
     $query = $this->database->select('comment_field_data', 'c');
     $query->addExpression('COUNT(cid)');
-    $count = $query->condition('c.entity_id', $comment->getCommentedEntityId())
+    $query->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
+    $count = $query->condition('ce.' . $target_id_column, $comment->getCommentedEntityId())
       ->condition('c.entity_type', $comment->getCommentedEntityTypeId())
       ->condition('c.field_name', $comment->getFieldName())
       ->condition('c.status', CommentInterface::PUBLISHED)
@@ -201,17 +206,17 @@ public function update(CommentInterface $comment) {
 
     if ($count > 0) {
       // Comments exist.
-      $last_reply = $this->database->select('comment_field_data', 'c')
-        ->fields('c', array('cid', 'name', 'changed', 'uid'))
-        ->condition('c.entity_id', $comment->getCommentedEntityId())
+      $last_reply_query = $this->database->select('comment_field_data', 'c');
+      $last_reply_query->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
+      $last_reply_query->fields('c', array('cid', 'name', 'changed', 'uid'))
+        ->condition('ce.' . $target_id_column, $comment->getCommentedEntityId())
         ->condition('c.entity_type', $comment->getCommentedEntityTypeId())
         ->condition('c.field_name', $comment->getFieldName())
         ->condition('c.status', CommentInterface::PUBLISHED)
         ->condition('default_langcode', 1)
         ->orderBy('c.created', 'DESC')
-        ->range(0, 1)
-        ->execute()
-        ->fetchObject();
+        ->range(0, 1);
+      $last_reply = $last_reply_query->execute()->fetchObject();
       // Use merge here because entity could be created before comment field.
       $this->database->merge('comment_entity_statistics')
         ->fields(array(
diff --git a/core/modules/comment/src/CommentStorage.php b/core/modules/comment/src/CommentStorage.php
index b4977fa..175b3a4 100644
--- a/core/modules/comment/src/CommentStorage.php
+++ b/core/modules/comment/src/CommentStorage.php
@@ -17,6 +17,7 @@
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 
 /**
  * Defines the controller class for comments.
@@ -72,12 +73,17 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
    * {@inheritdoc}
    */
   public function getMaxThread(CommentInterface $comment) {
-    $query = $this->database->select('comment_field_data', 'c')
-      ->condition('entity_id', $comment->getCommentedEntityId())
-      ->condition('field_name', $comment->getFieldName())
-      ->condition('entity_type', $comment->getCommentedEntityTypeId())
-      ->condition('default_langcode', 1);
-    $query->addExpression('MAX(thread)', 'thread');
+    $field_storage = FieldStorageConfig::loadByName('comment', $this->entityManager->getStorage('comment_type')->load($comment->bundle())->getEntityReferenceFieldName());
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
+    $query = $this->database->select('comment_field_data', 'c');
+    $query->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
+    $query->condition('ce.' . $target_id_column, $comment->getCommentedEntityId())
+      ->condition('c.field_name', $comment->getFieldName())
+      ->condition('c.entity_type', $comment->getCommentedEntityTypeId())
+      ->condition('c.default_langcode', 1);
+    $query->addExpression('MAX(c.thread)', 'thread');
     return $query->execute()
       ->fetchField();
   }
@@ -86,13 +92,18 @@ public function getMaxThread(CommentInterface $comment) {
    * {@inheritdoc}
    */
   public function getMaxThreadPerThread(CommentInterface $comment) {
-    $query = $this->database->select('comment_field_data', 'c')
-      ->condition('entity_id', $comment->getCommentedEntityId())
-      ->condition('field_name', $comment->getFieldName())
-      ->condition('entity_type', $comment->getCommentedEntityTypeId())
-      ->condition('thread', $comment->getParentComment()->getThread() . '.%', 'LIKE')
-      ->condition('default_langcode', 1);
-    $query->addExpression('MAX(thread)', 'thread');
+    $field_storage = FieldStorageConfig::loadByName('comment', $this->entityManager->getStorage('comment_type')->load($comment->bundle())->getEntityReferenceFieldName());
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
+    $query = $this->database->select('comment_field_data', 'c');
+    $query->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
+    $query->condition('ce.' . $target_id_column, $comment->getCommentedEntityId())
+      ->condition('c.field_name', $comment->getFieldName())
+      ->condition('c.entity_type', $comment->getCommentedEntityTypeId())
+      ->condition('c.thread', $comment->getParentComment()->getThread() . '.%', 'LIKE')
+      ->condition('c.default_langcode', 1);
+    $query->addExpression('MAX(c.thread)', 'thread');
     return $query->execute()
       ->fetchField();
   }
@@ -103,8 +114,14 @@ public function getMaxThreadPerThread(CommentInterface $comment) {
   public function getDisplayOrdinal(CommentInterface $comment, $comment_mode, $divisor = 1) {
     // Count how many comments (c1) are before $comment (c2) in display order.
     // This is the 0-based display ordinal.
+    $field_storage = FieldStorageConfig::loadByName('comment', $this->entityManager->getStorage('comment_type')->load($comment->bundle())->getEntityReferenceFieldName());
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
     $query = $this->database->select('comment_field_data', 'c1');
-    $query->innerJoin('comment_field_data', 'c2', 'c2.entity_id = c1.entity_id AND c2.entity_type = c1.entity_type AND c2.field_name = c1.field_name');
+    $query->join($comment_entity_table, 'ce1', 'c1.cid = %alias.entity_id AND %alias.deleted = 0');
+    $query->innerJoin($comment_entity_table, 'ce2', 'ce2.' . $target_id_column . ' = ce1.' . $target_id_column . ' AND ce2.bundle = ce1.bundle');
+    $query->join('comment_field_data', 'c2', '%alias.cid = ce2.entity_id AND ce2.deleted = 0');
     $query->addExpression('COUNT(*)', 'count');
     $query->condition('c2.cid', $comment->id());
     if (!$this->currentUser->hasPermission('administer comments')) {
@@ -151,15 +168,20 @@ public function getNewCommentPageNumber($total_comments, $new_comments, Fieldabl
       // Threaded comments.
 
       // 1. Find all the threads with a new comment.
-      $unread_threads_query = $this->database->select('comment_field_data', 'comment')
-        ->fields('comment', array('thread'))
-        ->condition('entity_id', $entity->id())
-        ->condition('entity_type', $entity->getEntityTypeId())
-        ->condition('field_name', $field_name)
-        ->condition('status', CommentInterface::PUBLISHED)
-        ->condition('default_langcode', 1)
-        ->orderBy('created', 'DESC')
-        ->orderBy('cid', 'DESC')
+      $field_storage = FieldStorageConfig::loadByName('comment', 'commented_' . $entity->getEntityTypeId());
+      $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+      $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+      $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
+      $unread_threads_query = $this->database->select('comment_field_data', 'comment');
+      $unread_threads_query->join($comment_entity_table, 'ce', 'comment.cid = %alias.entity_id AND %alias.deleted = 0');
+      $unread_threads_query->fields('comment', array('thread'))
+        ->condition('ce.' . $target_id_column, $entity->id())
+        ->condition('comment.entity_type', $entity->getEntityTypeId())
+        ->condition('comment.field_name', $field_name)
+        ->condition('comment.status', CommentInterface::PUBLISHED)
+        ->condition('comment.default_langcode', 1)
+        ->orderBy('comment.created', 'DESC')
+        ->orderBy('comment.cid', 'DESC')
         ->range(0, $new_comments);
 
       // 2. Find the first thread.
@@ -176,12 +198,15 @@ public function getNewCommentPageNumber($total_comments, $new_comments, Fieldabl
       $first_thread = substr($first_thread, 0, -1);
 
       // Find the number of the first comment of the first unread thread.
-      $count = $this->database->query('SELECT COUNT(*) FROM {comment_field_data} WHERE entity_id = :entity_id
-                        AND entity_type = :entity_type
-                        AND field_name = :field_name
-                        AND status = :status
-                        AND SUBSTRING(thread, 1, (LENGTH(thread) - 1)) < :thread
-                        AND default_langcode = 1', array(
+      $count = $this->database->query('SELECT COUNT(*) FROM {comment_field_data} c
+                        INNER JOIN {' . $comment_entity_table . '} ce
+                        ON c.cid = ce.entity_id AND ce.deleted = 0
+                        WHERE ce.' . $target_id_column . ' = :entity_id
+                        AND c.entity_type = :entity_type
+                        AND c.field_name = :field_name
+                        AND c.status = :status
+                        AND SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1)) < :thread
+                        AND c.default_langcode = 1', array(
         ':status' => CommentInterface::PUBLISHED,
         ':entity_id' => $entity->id(),
         ':field_name' => $field_name,
@@ -263,10 +288,15 @@ public function getChildCids(array $comments) {
    * to consider the trailing "/" so we use a substring only.
    */
   public function loadThread(EntityInterface $entity, $field_name, $mode, $comments_per_page = 0, $pager_id = 0) {
+    $field_storage = FieldStorageConfig::loadByName('comment', 'commented_' . $entity->getEntityTypeId());
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
     $query = $this->database->select('comment_field_data', 'c');
+    $query->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
     $query->addField('c', 'cid');
     $query
-      ->condition('c.entity_id', $entity->id())
+      ->condition('ce.' . $target_id_column, $entity->id())
       ->condition('c.entity_type', $entity->getEntityTypeId())
       ->condition('c.field_name', $field_name)
       ->condition('c.default_langcode', 1)
@@ -284,9 +314,10 @@ public function loadThread(EntityInterface $entity, $field_name, $mode, $comment
       }
 
       $count_query = $this->database->select('comment_field_data', 'c');
+      $count_query->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
       $count_query->addExpression('COUNT(*)');
       $count_query
-        ->condition('c.entity_id', $entity->id())
+        ->condition('ce.' . $target_id_column, $entity->id())
         ->condition('c.entity_type', $entity->getEntityTypeId())
         ->condition('c.field_name', $field_name)
         ->condition('c.default_langcode', 1)
diff --git a/core/modules/comment/src/CommentStorageSchema.php b/core/modules/comment/src/CommentStorageSchema.php
index 9196f9e..e725028 100644
--- a/core/modules/comment/src/CommentStorageSchema.php
+++ b/core/modules/comment/src/CommentStorageSchema.php
@@ -25,7 +25,6 @@ protected function getEntitySchema(ContentEntityTypeInterface $entity_type, $res
     $schema['comment_field_data']['indexes'] += array(
       'comment__status_pid' => array('pid', 'status'),
       'comment__num_new' => array(
-        'entity_id',
         'entity_type',
         'comment_type',
         'status',
@@ -34,7 +33,6 @@ protected function getEntitySchema(ContentEntityTypeInterface $entity_type, $res
         'thread',
       ),
       'comment__entity_langcode' => array(
-        'entity_id',
         'entity_type',
         'comment_type',
         'default_langcode',
diff --git a/core/modules/comment/src/CommentTypeForm.php b/core/modules/comment/src/CommentTypeForm.php
index 3c7ef6a..a104b99 100644
--- a/core/modules/comment/src/CommentTypeForm.php
+++ b/core/modules/comment/src/CommentTypeForm.php
@@ -169,6 +169,7 @@ public function save(array $form, FormStateInterface $form_state) {
     }
     else {
       $this->commentManager->addBodyField($comment_type->id());
+      $this->commentManager->addEntityField($comment_type->id());
       drupal_set_message(t('Comment type %label has been added.', array('%label' => $comment_type->label())));
       $this->logger->notice('Comment type %label has been added.', array('%label' => $comment_type->label(), 'link' =>  $edit_link));
     }
diff --git a/core/modules/comment/src/CommentTypeInterface.php b/core/modules/comment/src/CommentTypeInterface.php
index 2ccc0c1..cc4ed2b 100644
--- a/core/modules/comment/src/CommentTypeInterface.php
+++ b/core/modules/comment/src/CommentTypeInterface.php
@@ -40,4 +40,13 @@ public function setDescription($description);
    */
   public function getTargetEntityTypeId();
 
+  /**
+   * Gets the entity reference field name for this comment type.
+   *
+   * @return string
+   *   The field name of the entity reference field referencing the commented
+   *   entity.
+   */
+  public function getEntityReferenceFieldName();
+
 }
diff --git a/core/modules/comment/src/CommentViewsData.php b/core/modules/comment/src/CommentViewsData.php
index c70f77f..546c035 100644
--- a/core/modules/comment/src/CommentViewsData.php
+++ b/core/modules/comment/src/CommentViewsData.php
@@ -133,33 +133,6 @@ public function getViewsData() {
 
     $entities_types = \Drupal::entityManager()->getDefinitions();
 
-    // Provide a relationship for each entity type except comment.
-    foreach ($entities_types as $type => $entity_type) {
-      if ($type == 'comment' || !$entity_type->isSubclassOf('\Drupal\Core\Entity\ContentEntityInterface') || !$entity_type->getBaseTable()) {
-        continue;
-      }
-      if ($fields = \Drupal::service('comment.manager')->getFields($type)) {
-        $data['comment_field_data'][$type] = array(
-          'relationship' => array(
-            'title' => $entity_type->getLabel(),
-            'help' => t('The @entity_type to which the comment is a reply to.', array('@entity_type' => $entity_type->getLabel())),
-            'base' => $entity_type->getDataTable() ?: $entity_type->getBaseTable(),
-            'base field' => $entity_type->getKey('id'),
-            'relationship field' => 'entity_id',
-            'id' => 'standard',
-            'label' => $entity_type->getLabel(),
-            'extra' => array(
-              array(
-                'field' => 'entity_type',
-                'value' => $type,
-                'table' => 'comment_field_data'
-              ),
-            ),
-          ),
-        );
-      }
-    }
-
     $data['comment_field_data']['uid']['title'] = t('Author uid');
     $data['comment_field_data']['uid']['help'] = t('If you need more fields than the uid add the comment: author relationship');
     $data['comment_field_data']['uid']['relationship']['title'] = t('Author');
diff --git a/core/modules/comment/src/Controller/CommentController.php b/core/modules/comment/src/Controller/CommentController.php
index add5333..44fa500 100644
--- a/core/modules/comment/src/Controller/CommentController.php
+++ b/core/modules/comment/src/Controller/CommentController.php
@@ -238,7 +238,7 @@ public function getReplyForm(Request $request, EntityInterface $entity, $field_n
 
     // Show the actual reply box.
     $comment = $this->entityManager()->getStorage('comment')->create(array(
-      'entity_id' => $entity->id(),
+      'commented_' . $entity->getEntityTypeId() => $entity->id(),
       'pid' => $pid,
       'entity_type' => $entity->getEntityTypeId(),
       'field_name' => $field_name,
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index bd3fbfc..8e9a700 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -223,11 +223,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The parent comment ID if this is a reply to a comment.'))
       ->setSetting('target_type', 'comment');
 
-    $fields['entity_id'] = BaseFieldDefinition::create('entity_reference')
-      ->setLabel(t('Entity ID'))
-      ->setDescription(t('The ID of the entity of which this comment is a reply.'))
-      ->setRequired(TRUE);
-
     $fields['langcode'] = BaseFieldDefinition::create('language')
       ->setLabel(t('Language'))
       ->setDescription(t('The comment language code.'))
@@ -328,18 +323,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
   /**
    * {@inheritdoc}
    */
-  public static function bundleFieldDefinitions(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
-    if ($comment_type = CommentType::load($bundle)) {
-      $fields['entity_id'] = clone $base_field_definitions['entity_id'];
-      $fields['entity_id']->setSetting('target_type', $comment_type->getTargetEntityTypeId());
-      return $fields;
-    }
-    return array();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function hasParentComment() {
     return (bool) $this->get('pid')->target_id;
   }
@@ -355,14 +338,14 @@ public function getParentComment() {
    * {@inheritdoc}
    */
   public function getCommentedEntity() {
-    return $this->get('entity_id')->entity;
+    return $this->get(CommentType::load($this->bundle())->getEntityReferenceFieldName())->entity;
   }
 
   /**
    * {@inheritdoc}
    */
   public function getCommentedEntityId() {
-    return $this->get('entity_id')->target_id;
+    return $this->get(CommentType::load($this->bundle())->getEntityReferenceFieldName())->target_id;
   }
 
   /**
diff --git a/core/modules/comment/src/Entity/CommentType.php b/core/modules/comment/src/Entity/CommentType.php
index 94fd193..66299c5 100644
--- a/core/modules/comment/src/Entity/CommentType.php
+++ b/core/modules/comment/src/Entity/CommentType.php
@@ -99,4 +99,11 @@ public function getTargetEntityTypeId() {
     return $this->target_entity_type_id;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getEntityReferenceFieldName() {
+    return 'commented_' . $this->getTargetEntityTypeId();
+  }
+
 }
diff --git a/core/modules/comment/src/Form/DeleteForm.php b/core/modules/comment/src/Form/DeleteForm.php
index cfeaa53..44dbe6c 100644
--- a/core/modules/comment/src/Form/DeleteForm.php
+++ b/core/modules/comment/src/Form/DeleteForm.php
@@ -19,7 +19,7 @@ class DeleteForm extends ContentEntityDeleteForm {
    */
   public function getCancelUrl() {
     // Point to the entity of which this comment is a reply.
-    return $this->entity->get('entity_id')->entity->urlInfo();
+    return $this->entity->getCommentedEntity()->urlInfo();
   }
 
   /**
diff --git a/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php b/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php
index 0127e6c..a053a31 100644
--- a/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php
+++ b/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Database\Query\SelectInterface;
 use Drupal\Core\Entity\Plugin\EntityReferenceSelection\SelectionBase;
 use Drupal\comment\CommentInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 
 /**
  * Provides specific access control for the comment entity type.
@@ -45,16 +46,21 @@ protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS')
   public function entityQueryAlter(SelectInterface $query) {
     $tables = $query->getTables();
     $data_table = 'comment_field_data';
+    $field_storage = FieldStorageConfig::loadByName('comment', 'commented_node');
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
     if (!isset($tables['comment_field_data']['alias'])) {
       // If no conditions join against the comment data table, it should be
       // joined manually to allow node access processing.
       $query->innerJoin($data_table, NULL, "base_table.cid = $data_table.cid AND $data_table.default_langcode = 1");
     }
-
+    $query->condition($data_table . '.entity_type', 'node');
+    $query->join($comment_entity_table, 'ce', $data_table . '.cid = %alias.entity_id AND %alias.deleted = 0');
     // The Comment module doesn't implement any proper comment access,
     // and as a consequence doesn't make sure that comments cannot be viewed
     // when the user doesn't have access to the node.
-    $node_alias = $query->innerJoin('node_field_data', 'n', '%alias.nid = ' . $data_table . '.entity_id AND ' . $data_table . ".entity_type = 'node'");
+    $node_alias = $query->innerJoin('node_field_data', 'n', '%alias.nid = ce.' . $target_id_column);
     // Pass the query to the node access control.
     $this->reAlterQuery($query, 'node_access', $node_alias);
 
diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
index acef616..c651f86 100644
--- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
+++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
@@ -189,7 +189,7 @@ public function viewElements(FieldItemListInterface $items) {
           if ($this->currentUser->isAnonymous()) {
             $comment = $this->storage->create(array(
               'entity_type' => $entity->getEntityTypeId(),
-              'entity_id' => $entity->id(),
+              'commented_' . $entity->getEntityTypeId() => $entity->id(),
               'field_name' => $field_name,
               'comment_type' => $this->getFieldSetting('comment_type'),
               'pid' => NULL,
diff --git a/core/modules/comment/src/Plugin/views/argument/UserUid.php b/core/modules/comment/src/Plugin/views/argument/UserUid.php
index f6558e6..8f2c3868 100644
--- a/core/modules/comment/src/Plugin/views/argument/UserUid.php
+++ b/core/modules/comment/src/Plugin/views/argument/UserUid.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Database\Connection;
 use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 
 /**
  * Argument handler to accept a user id to check for nodes that
@@ -87,13 +88,18 @@ public function query($group_by = FALSE) {
 
     // Use the table definition to correctly add this user ID condition.
     if ($this->table != 'comment_field_data') {
+      $field_storage = FieldStorageConfig::loadByName('comment', 'commented_' . $this->definition['entity_type']);
+      $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+      $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+      $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
       $subselect = $this->database->select('comment_field_data', 'c');
+      $subselect->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
       $subselect->addField('c', 'cid');
       $subselect->condition('c.uid', $this->argument);
 
       $entity_id = $this->definition['entity_id'];
       $entity_type = $this->definition['entity_type'];
-      $subselect->where("c.entity_id = $this->tableAlias.$entity_id");
+      $subselect->where("ce.$target_id_column = $this->tableAlias.$entity_id");
       $subselect->condition('c.entity_type', $entity_type);
 
       $condition = db_or()
diff --git a/core/modules/comment/src/Plugin/views/field/NodeNewComments.php b/core/modules/comment/src/Plugin/views/field/NodeNewComments.php
index 695bd91..9e39fd1 100644
--- a/core/modules/comment/src/Plugin/views/field/NodeNewComments.php
+++ b/core/modules/comment/src/Plugin/views/field/NodeNewComments.php
@@ -15,6 +15,7 @@
 use Drupal\views\ResultRow;
 use Drupal\views\ViewExecutable;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 
 /**
  * Field handler to display the number of new comments.
@@ -131,7 +132,13 @@ public function preRender(&$values) {
     }
 
     if ($nids) {
-      $result = $this->database->query("SELECT n.nid, COUNT(c.cid) as num_comments FROM {node} n INNER JOIN {comment_field_data} c ON n.nid = c.entity_id AND c.entity_type = 'node' AND c.default_langcode = 1
+      $field_storage = FieldStorageConfig::loadByName('comment', 'commented_node');
+      $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+      $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+      $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
+      $result = $this->database->query("SELECT n.nid, COUNT(c.cid) as num_comments FROM {node} n
+        INNDER JOIN {" . $comment_entity_table . "} ce ON c.cid = ce.entity_id AND ce.deleted = 0
+        INNER JOIN {comment_field_data} c ON n.nid = c.$target_id_column AND c.entity_type = 'node' AND c.default_langcode = 1
         LEFT JOIN {history} h ON h.nid = n.nid AND h.uid = :h_uid WHERE n.nid IN ( :nids[] )
         AND c.changed > GREATEST(COALESCE(h.timestamp, :timestamp1), :timestamp2) AND c.status = :status GROUP BY n.nid", array(
         ':status' => CommentInterface::PUBLISHED,
diff --git a/core/modules/comment/src/Plugin/views/filter/UserUid.php b/core/modules/comment/src/Plugin/views/filter/UserUid.php
index 16d4fb0..14ddca0 100644
--- a/core/modules/comment/src/Plugin/views/filter/UserUid.php
+++ b/core/modules/comment/src/Plugin/views/filter/UserUid.php
@@ -8,6 +8,7 @@
 namespace Drupal\comment\Plugin\views\filter;
 
 use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\field\Entity\FieldStorageConfig;
 
 /**
  * Filter handler to accept a user id to check for nodes that user posted or
@@ -21,14 +22,18 @@ class UserUid extends FilterPluginBase {
 
   public function query() {
     $this->ensureMyTable();
-
+    $field_storage = FieldStorageConfig::loadByName('comment', 'commented_' . $this->definition['entity_type']);
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
     $subselect = db_select('comment_field_data', 'c');
+    $subselect->join($comment_entity_table, 'ce', 'c.cid = %alias.entity_id AND %alias.deleted = 0');
     $subselect->addField('c', 'cid');
     $subselect->condition('c.uid', $this->value, $this->operator);
 
     $entity_id = $this->definition['entity_id'];
     $entity_type = $this->definition['entity_type'];
-    $subselect->where("c.entity_id = $this->tableAlias.$entity_id");
+    $subselect->where("ce.$target_id_column = $this->tableAlias.$entity_id");
     $subselect->condition('c.entity_type', $entity_type);
 
     $condition = db_or()
diff --git a/core/modules/comment/src/Plugin/views/wizard/Comment.php b/core/modules/comment/src/Plugin/views/wizard/Comment.php
index 35c3167..7bbbf12 100644
--- a/core/modules/comment/src/Plugin/views/wizard/Comment.php
+++ b/core/modules/comment/src/Plugin/views/wizard/Comment.php
@@ -47,7 +47,7 @@ class Comment extends WizardPluginBase {
       'table' => 'node_field_data',
       'field' => 'status',
       'plugin_id' => 'boolean',
-      'relationship' => 'node',
+      'relationship' => 'commented_node',
       'entity_type' => 'node',
       'entity_field' => 'status',
     ),
@@ -74,12 +74,11 @@ protected function defaultDisplayOptions() {
     $display_options['access']['options']['perm'] = 'access comments';
 
     // Add a relationship to nodes.
-    $display_options['relationships']['node']['id'] = 'node';
-    $display_options['relationships']['node']['table'] = 'comment_field_data';
-    $display_options['relationships']['node']['field'] = 'node';
-    $display_options['relationships']['node']['entity_type'] = 'comment_field_data';
-    $display_options['relationships']['node']['required'] = 1;
-    $display_options['relationships']['node']['plugin_id'] = 'standard';
+    $display_options['relationships']['commented_node']['id'] = 'commented_node';
+    $display_options['relationships']['commented_node']['table'] = 'comment__commented_node';
+    $display_options['relationships']['commented_node']['field'] = 'commented_node';
+    $display_options['relationships']['commented_node']['required'] = 1;
+    $display_options['relationships']['commented_node']['plugin_id'] = 'standard';
 
     // Remove the default fields, since we are customizing them here.
     unset($display_options['fields']);
diff --git a/core/modules/comment/src/Tests/CommentAdminTest.php b/core/modules/comment/src/Tests/CommentAdminTest.php
index ee03405..b0c0678 100644
--- a/core/modules/comment/src/Tests/CommentAdminTest.php
+++ b/core/modules/comment/src/Tests/CommentAdminTest.php
@@ -47,7 +47,7 @@ function testApprovalAdminInterface() {
       'cid' => $anonymous_comment4,
       'subject' => $subject,
       'comment_body' => $body,
-      'entity_id' => $this->node->id(),
+      'commented_node' => $this->node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment'
     ));
@@ -124,7 +124,7 @@ function testApprovalNodeInterface() {
       'cid' => $anonymous_comment4,
       'subject' => $subject,
       'comment_body' => $body,
-      'entity_id' => $this->node->id(),
+      'commented_node' => $this->node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment'
     ));
diff --git a/core/modules/comment/src/Tests/CommentBookTest.php b/core/modules/comment/src/Tests/CommentBookTest.php
index ecc2624..698f7db 100644
--- a/core/modules/comment/src/Tests/CommentBookTest.php
+++ b/core/modules/comment/src/Tests/CommentBookTest.php
@@ -50,7 +50,7 @@ public function testBookCommentPrint() {
     $comment = entity_create('comment', array(
       'subject' => $comment_subject,
       'comment_body' => $comment_body,
-      'entity_id' => $book_node->id(),
+      'commented_node' => $book_node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'status' => CommentInterface::PUBLISHED,
diff --git a/core/modules/comment/src/Tests/CommentCSSTest.php b/core/modules/comment/src/Tests/CommentCSSTest.php
index 49a9e34..bfd4af9 100644
--- a/core/modules/comment/src/Tests/CommentCSSTest.php
+++ b/core/modules/comment/src/Tests/CommentCSSTest.php
@@ -48,7 +48,7 @@ function testCommentClasses() {
       // Add a comment.
       /** @var \Drupal\comment\CommentInterface $comment */
       $comment = entity_create('comment', array(
-        'entity_id' => $node->id(),
+        'commented_node' => $node->id(),
         'entity_type' => 'node',
         'field_name' => 'comment',
         'uid' => $case['comment_uid'],
diff --git a/core/modules/comment/src/Tests/CommentCacheTagsTest.php b/core/modules/comment/src/Tests/CommentCacheTagsTest.php
index 5226434..424476c 100644
--- a/core/modules/comment/src/Tests/CommentCacheTagsTest.php
+++ b/core/modules/comment/src/Tests/CommentCacheTagsTest.php
@@ -71,13 +71,12 @@ protected function createEntity() {
         'value' => 'The name "llama" was adopted by European settlers from native Peruvians.',
         'format' => 'plain_text',
       ),
-      'entity_id' => $entity_test->id(),
+      'commented_entity_test' => $entity_test->id(),
       'entity_type' => 'entity_test',
       'field_name' => 'comment',
       'status' => \Drupal\comment\CommentInterface::PUBLISHED,
     ));
     $comment->save();
-
     return $comment;
   }
 
diff --git a/core/modules/comment/src/Tests/CommentDefaultFormatterCacheTagsTest.php b/core/modules/comment/src/Tests/CommentDefaultFormatterCacheTagsTest.php
index 342765f..ae0442e 100644
--- a/core/modules/comment/src/Tests/CommentDefaultFormatterCacheTagsTest.php
+++ b/core/modules/comment/src/Tests/CommentDefaultFormatterCacheTagsTest.php
@@ -84,7 +84,7 @@ public function testCacheTags() {
         'value' => 'Llamas are cool!',
         'format' => 'plain_text',
       ),
-      'entity_id' => $commented_entity->id(),
+      'commented_entity_test' => $commented_entity->id(),
       'entity_type' => 'entity_test',
       'field_name' => 'comment',
       'comment_type' => 'comment',
diff --git a/core/modules/comment/src/Tests/CommentFieldAccessTest.php b/core/modules/comment/src/Tests/CommentFieldAccessTest.php
index bd08dfe..e05e597 100644
--- a/core/modules/comment/src/Tests/CommentFieldAccessTest.php
+++ b/core/modules/comment/src/Tests/CommentFieldAccessTest.php
@@ -58,7 +58,7 @@ class CommentFieldAccessTest extends EntityUnitTestBase {
     'thread',
     'comment_type',
     'pid',
-    'entity_id',
+    'commented_entity_test',
     'entity_type',
     'field_name',
   );
@@ -146,7 +146,7 @@ public function testAccessToAdministrativeFields() {
       'hostname' => 'magic.example.com',
       'mail' => 'tonythemagicalpony@example.com',
       'subject' => 'Bruce the Mesopotamian moose',
-      'entity_id' => $host->id(),
+      'commented_entity_test' => $host->id(),
       'comment_type' => 'comment',
       'field_name' => 'comment',
       'pid' => 0,
@@ -158,7 +158,7 @@ public function testAccessToAdministrativeFields() {
       'entity_type' => 'entity_test',
       'hostname' => 'magic.example.com',
       'subject' => 'Brian the messed up lion',
-      'entity_id' => $host->id(),
+      'commented_entity_test' => $host->id(),
       'comment_type' => 'comment',
       'field_name' => 'comment',
       'status' => 1,
@@ -172,7 +172,7 @@ public function testAccessToAdministrativeFields() {
       // Unpublished.
       'status' => 0,
       'subject' => 'Gail the minky whale',
-      'entity_id' => $host->id(),
+      'commented_entity_test' => $host->id(),
       'comment_type' => 'comment',
       'field_name' => 'comment_other',
       'pid' => $comment2->id(),
@@ -186,7 +186,7 @@ public function testAccessToAdministrativeFields() {
       // Unpublished.
       'status' => 0,
       'subject' => 'Daniel the Cocker-Spaniel',
-      'entity_id' => $host->id(),
+      'commented_entity_test' => $host->id(),
       'comment_type' => 'comment',
       'field_name' => 'comment_other',
       'pid' => 0,
diff --git a/core/modules/comment/src/Tests/CommentLanguageTest.php b/core/modules/comment/src/Tests/CommentLanguageTest.php
index 883eb17..3c66817 100644
--- a/core/modules/comment/src/Tests/CommentLanguageTest.php
+++ b/core/modules/comment/src/Tests/CommentLanguageTest.php
@@ -115,7 +115,7 @@ function testCommentLanguage() {
 
         // Check that comment language matches the current content language.
         $cids = \Drupal::entityQuery('comment')
-          ->condition('entity_id', $node->id())
+          ->condition('commented_node.target_id', $node->id())
           ->condition('entity_type', 'node')
           ->condition('field_name', 'comment')
           ->sort('cid', 'DESC')
diff --git a/core/modules/comment/src/Tests/CommentLinksTest.php b/core/modules/comment/src/Tests/CommentLinksTest.php
index 8dc3b5b..789293d 100644
--- a/core/modules/comment/src/Tests/CommentLinksTest.php
+++ b/core/modules/comment/src/Tests/CommentLinksTest.php
@@ -61,7 +61,7 @@ public function testCommentLinks() {
     // $this->postComment() relies on actual user permissions.
     $comment = entity_create('comment', array(
       'cid' => NULL,
-      'entity_id' => $this->node->id(),
+      'commented_node' => $this->node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'pid' => 0,
diff --git a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
index b605f94..f6a6f42 100644
--- a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
+++ b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
@@ -87,7 +87,7 @@ public function testCommentNewCommentsIndicator() {
     /** @var \Drupal\comment\CommentInterface $comment */
     $comment = entity_create('comment', array(
       'cid' => NULL,
-      'entity_id' => $this->node->id(),
+      'commented_node' => $this->node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'pid' => 0,
diff --git a/core/modules/comment/src/Tests/CommentNonNodeTest.php b/core/modules/comment/src/Tests/CommentNonNodeTest.php
index a7f7918..7a5e375 100644
--- a/core/modules/comment/src/Tests/CommentNonNodeTest.php
+++ b/core/modules/comment/src/Tests/CommentNonNodeTest.php
@@ -453,8 +453,8 @@ public function testsNonIntegerIdEntities() {
     $this->drupalLogin($limited_user);
     // Visit the Field UI field add page.
     $this->drupalGet('entity_test_string_id/structure/entity_test/fields/add-field');
-    // Ensure field isn't shown for string IDs.
-    $this->assertNoOption('edit-new-storage-type', 'comment');
+    // Ensure field is shown for string IDs.
+    $this->assertOption('edit-new-storage-type', 'comment');
     // Ensure a core field type shown.
     $this->assertOption('edit-new-storage-type', 'boolean');
 
@@ -465,8 +465,8 @@ public function testsNonIntegerIdEntities() {
     )));
     // Visit the Field UI field add page.
     $this->drupalGet('entity_test_no_id/structure/entity_test/fields/add-field');
-    // Ensure field isn't shown for empty IDs.
-    $this->assertNoOption('edit-new-storage-type', 'comment');
+    // Ensure field is shown for empty IDs.
+    $this->assertOption('edit-new-storage-type', 'comment');
     // Ensure a core field type shown.
     $this->assertOption('edit-new-storage-type', 'boolean');
   }
diff --git a/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php b/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php
index 0285432..97f9045 100644
--- a/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php
+++ b/core/modules/comment/src/Tests/CommentStringIdEntitiesTest.php
@@ -60,10 +60,10 @@ public function testCommentFieldNonStringId() {
         'type' => 'comment',
       ));
       $field_storage->save();
-      $this->fail('Did not throw an exception as expected.');
+      $this->pass('No exception thrown when trying to create comment field on Entity Type with string ID.');
     }
     catch (\UnexpectedValueException $e) {
-      $this->pass('Exception thrown when trying to create comment field on Entity Type with string ID.');
+      $this->fail('Exception thrown when trying to create comment field on Entity Type with string ID.');
     }
   }
 
diff --git a/core/modules/comment/src/Tests/CommentTestTrait.php b/core/modules/comment/src/Tests/CommentTestTrait.php
index 58aa9c7..81e00fa 100644
--- a/core/modules/comment/src/Tests/CommentTestTrait.php
+++ b/core/modules/comment/src/Tests/CommentTestTrait.php
@@ -58,6 +58,8 @@ public function addDefaultCommentField($entity_type, $bundle, $field_name = 'com
     }
     // Add a body field to the comment type.
     \Drupal::service('comment.manager')->addBodyField($comment_type_id);
+    // Add an entity field to the comment type.
+    \Drupal::service('comment.manager')->addEntityField($comment_type_id);
 
     // Add a comment field to the host entity type. Create the field storage if
     // needed.
diff --git a/core/modules/comment/src/Tests/CommentTranslationUITest.php b/core/modules/comment/src/Tests/CommentTranslationUITest.php
index 3d07024..ee84e4c 100644
--- a/core/modules/comment/src/Tests/CommentTranslationUITest.php
+++ b/core/modules/comment/src/Tests/CommentTranslationUITest.php
@@ -92,7 +92,7 @@ protected function createEntity($values, $langcode, $comment_type = 'comment_art
         array('status' => CommentItemInterface::OPEN)
       ),
     ));
-    $values['entity_id'] = $node->id();
+    $values['commented_node'] = $node->id();
     $values['entity_type'] = 'node';
     $values['field_name'] = $field_name;
     $values['uid'] = $node->getOwnerId();
diff --git a/core/modules/comment/src/Tests/CommentTypeTest.php b/core/modules/comment/src/Tests/CommentTypeTest.php
index 6efc6b6..e18b7ce 100644
--- a/core/modules/comment/src/Tests/CommentTypeTest.php
+++ b/core/modules/comment/src/Tests/CommentTypeTest.php
@@ -144,7 +144,7 @@ public function testCommentTypeDeletion() {
       'comment_type' => 'foo',
       'entity_type' => 'node',
       'field_name' => 'foo',
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
     ));
     $comment->save();
 
diff --git a/core/modules/comment/src/Tests/CommentValidationTest.php b/core/modules/comment/src/Tests/CommentValidationTest.php
index 62acec0..5fac8c3 100644
--- a/core/modules/comment/src/Tests/CommentValidationTest.php
+++ b/core/modules/comment/src/Tests/CommentValidationTest.php
@@ -48,6 +48,7 @@ public function testValidation() {
       'label' => 'comment',
       'target_entity_type_id' => 'node',
     ))->save();
+    \Drupal::service('comment.manager')->addEntityField('comment');
 
     // Add comment field to content.
     $this->entityManager->getStorage('field_storage_config')->create(array(
@@ -82,7 +83,7 @@ public function testValidation() {
     $node->save();
 
     $comment = $this->entityManager->getStorage('comment')->create(array(
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'comment_body' => $this->randomMachineName(),
@@ -147,7 +148,7 @@ public function testValidation() {
     $node = Node::load($node->id());
     // Create a new comment with the new field.
     $comment = $this->entityManager->getStorage('comment')->create(array(
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'comment_body' => $this->randomMachineName(),
@@ -161,7 +162,7 @@ public function testValidation() {
 
     // Test creating a default comment with a given user id works.
     $comment = $this->entityManager->getStorage('comment')->create(array(
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'comment_body' => $this->randomMachineName(),
@@ -172,7 +173,7 @@ public function testValidation() {
 
     // Test specifying a wrong author name does not work.
     $comment = $this->entityManager->getStorage('comment')->create(array(
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'comment_body' => $this->randomMachineName(),
diff --git a/core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php b/core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php
index 3371358..2b8f414 100644
--- a/core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php
+++ b/core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php
@@ -32,7 +32,7 @@ function testCommentUserUIDTest() {
 
     $comment = Comment::create([
       'uid' => $new_user->uid->value,
-      'entity_id' => $this->nodeUserCommented->id(),
+      'commented_node' => $this->nodeUserCommented->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'subject' => 'if a woodchuck could chuck wood.',
diff --git a/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php b/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php
index 4fd7d58..dc25992 100644
--- a/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php
@@ -54,8 +54,9 @@ function setUp() {
     // as it predates the language set-up.
     $comment = array(
       'uid' => $this->loggedInUser->id(),
-      'entity_id' => $this->nodeUserCommented->id(),
+      'commented_node' => $this->nodeUserCommented->id(),
       'entity_type' => 'node',
+      'comment_type' => 'comment',
       'field_name' => 'comment',
       'cid' => '',
       'pid' => '',
diff --git a/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php b/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php
index ab40e6f..7173204 100644
--- a/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php
@@ -47,7 +47,7 @@ protected function setUp() {
     parent::setUp();
     $this->addDefaultCommentField('node', 'page', $this->fieldName);
     $this->customComment = Comment::create([
-      'entity_id' => $this->nodeUserCommented->id(),
+      'commented_node' => $this->nodeUserCommented->id(),
       'entity_type' => 'node',
       'field_name' => $this->fieldName,
     ]);
diff --git a/core/modules/comment/src/Tests/Views/CommentRestExportTest.php b/core/modules/comment/src/Tests/Views/CommentRestExportTest.php
index 9737b4f..a1b400b 100644
--- a/core/modules/comment/src/Tests/Views/CommentRestExportTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentRestExportTest.php
@@ -33,7 +33,7 @@ protected function setUp() {
     // Add another anonymous comment.
     $comment = array(
       'uid' => 0,
-      'entity_id' => $this->nodeUserCommented->id(),
+      'commented_node' => $this->nodeUserCommented->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'subject' => 'A lot, apparently',
diff --git a/core/modules/comment/src/Tests/Views/CommentTestBase.php b/core/modules/comment/src/Tests/Views/CommentTestBase.php
index 202bf47..e33db67 100644
--- a/core/modules/comment/src/Tests/Views/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/Views/CommentTestBase.php
@@ -23,7 +23,7 @@
    *
    * @var array
    */
-  public static $modules = array('node', 'comment', 'comment_test_views');
+  public static $modules = array('node', 'comment', 'comment_test_views', 'entity_reference');
 
   /**
    * A normal user with permission to post comments (without approval).
@@ -79,7 +79,7 @@ protected function setUp() {
 
     $comment = array(
       'uid' => $this->loggedInUser->id(),
-      'entity_id' => $this->nodeUserCommented->id(),
+      'commented_node' => $this->nodeUserCommented->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'subject' => 'How much wood would a woodchuck chuck',
diff --git a/core/modules/comment/src/Tests/Views/CommentUserNameTest.php b/core/modules/comment/src/Tests/Views/CommentUserNameTest.php
index bf06be6..6dfa56b 100644
--- a/core/modules/comment/src/Tests/Views/CommentUserNameTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentUserNameTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\Entity\Comment;
+use Drupal\comment\Entity\CommentType;
 use Drupal\Core\Session\AnonymousUserSession;
 use Drupal\user\Entity\Role;
 use Drupal\user\Entity\User;
@@ -31,7 +32,7 @@ class CommentUserNameTest extends ViewUnitTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['user', 'comment', 'entity_test'];
+  public static $modules = ['user', 'comment', 'entity_test', 'field', 'entity_reference'];
 
   /**
    * {@inheritdoc}
@@ -71,6 +72,14 @@ protected function setUp($import_test_views = TRUE) {
     ]);
     $this->adminUser->save();
 
+    $comment_type = CommentType::create([
+      'id' => 'entity_test',
+      'label' => 'Entity test comments',
+      'description' => 'Entity test comment field',
+      'target_entity_type_id' => 'entity_test',
+    ]);
+    $comment_type->save();
+    \Drupal::service('comment.manager')->addEntityField('entity_test');
     // Create some comments.
     $comment = Comment::create([
       'subject' => 'My comment title',
diff --git a/core/modules/comment/src/Tests/Views/CommentViewsFieldAccessTest.php b/core/modules/comment/src/Tests/Views/CommentViewsFieldAccessTest.php
index 2400dd0..22f19e0 100644
--- a/core/modules/comment/src/Tests/Views/CommentViewsFieldAccessTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentViewsFieldAccessTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\Entity\Comment;
+use Drupal\comment\Entity\CommentType;
 use Drupal\user\Entity\User;
 use Drupal\views\Tests\Handler\FieldFieldAccessTestBase;
 
@@ -21,7 +22,7 @@ class CommentViewsFieldAccessTest extends FieldFieldAccessTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['comment', 'entity_test'];
+  public static $modules = ['comment', 'entity_test', 'field', 'entity_reference'];
 
   /**
    * {@inheritdoc}
@@ -41,6 +42,15 @@ public function testCommentFields() {
     ]);
     $user->save();
 
+    $comment_type = CommentType::create([
+      'id' => 'entity_test',
+      'label' => 'Entity test comments',
+      'description' => 'Entity test comment field',
+      'target_entity_type_id' => 'entity_test',
+    ]);
+    $comment_type->save();
+    \Drupal::service('comment.manager')->addEntityField('entity_test');
+
     $comment = Comment::create([
       'subject' => 'My comment title',
       'uid' => $user->id(),
diff --git a/core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php b/core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php
index 89b03b3..9550072 100644
--- a/core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php
+++ b/core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php
@@ -88,7 +88,7 @@ protected function setUp() {
         'status' => CommentInterface::PUBLISHED,
         'field_name' => 'comment',
         'entity_type' => 'node',
-        'entity_id' => $this->node->id(),
+        'commented_node' => $this->node->id(),
       ));
       $comment->setOwnerId(0);
       $comment->setSubject('Test comment ' . $i);
diff --git a/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php b/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php
index ffee1d1..5d0e8d7 100644
--- a/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php
+++ b/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php
@@ -38,7 +38,7 @@ function testCommentUserUIDTest() {
 
     $comment = Comment::create([
       'uid' => $new_user->uid->value,
-      'entity_id' => $this->nodeUserCommented->id(),
+      'commented_node' => $this->nodeUserCommented->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'subject' => 'if a woodchuck could chuck wood.',
diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rest.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rest.yml
index 0c74efa..26654b3 100644
--- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rest.yml
+++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rest.yml
@@ -80,15 +80,15 @@ display:
           hide_empty: false
           default_field_elements: true
       relationships:
-        node:
-          id: node
-          table: comment_field_data
-          field: node
-          required: true
-          plugin_id: standard
+        commented_node:
+          id: commented_node
+          table: comment__commented_node
+          field: commented_node
           relationship: none
           group_type: group
-          admin_label: Content
+          admin_label: 'commented_node: Content'
+          required: true
+          plugin_id: standard
       fields:
         subject:
           id: subject
@@ -338,7 +338,7 @@ display:
           id: nid
           table: node
           field: nid
-          relationship: node
+          relationship: commented_node
           group_type: group
           admin_label: ''
           default_action: default
diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml
index d7b1b3d..c888e8c 100644
--- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml
+++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml
@@ -73,14 +73,15 @@ display:
         options:
           view_mode: full
       relationships:
-        node:
-          field: node
-          id: node
-          required: true
-          table: comment_field_data
+        commented_node:
+          id: commented_node
+          table: comment__commented_node
+          field: commented_node
           relationship: none
           group_type: group
-          admin_label: Content
+          admin_label: 'commented_node: Content'
+          required: true
+          plugin_id: standard
       fields:
         subject:
           id: subject
@@ -131,14 +132,40 @@ display:
           entity_type: comment
           entity_field: status
         status_node:
-          value: true
+          id: status_node
           table: node_field_data
           field: status
-          relationship: node
-          id: status_node
+          relationship: commented_node
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: true
+          group: 1
+          exposed: false
           expose:
+            operator_id: ''
+            label: ''
+            description: ''
+            use_operator: false
             operator: ''
-          group: 1
+            identifier: ''
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
           plugin_id: boolean
           entity_type: node
           entity_field: status
diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml
index be6210a..a33fa73 100644
--- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml
+++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml
@@ -35,11 +35,15 @@ display:
       row:
         type: fields
       relationships:
-        node:
-          field: node
-          id: node
+        commented_node:
+          id: commented_node
+          table: comment__commented_node
+          field: commented_node
+          relationship: none
+          group_type: group
+          admin_label: 'commented_node: Content'
           required: true
-          table: comment_field_data
+          plugin_id: standard
       fields:
         subject:
           id: subject
diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_field_filters.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_field_filters.yml
index 76c67c6..c318345 100644
--- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_field_filters.yml
+++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_field_filters.yml
@@ -56,16 +56,7 @@ display:
         type: 'entity:comment'
         options:
           view_mode: default
-      relationships:
-        node:
-          id: node
-          table: comment_field_data
-          field: node
-          required: true
-          plugin_id: standard
-          relationship: none
-          group_type: group
-          admin_label: Content
+      relationships: {  }
       fields:
         subject:
           id: subject
diff --git a/core/modules/forum/config/optional/field.field.comment.comment_forum.commented_node.yml b/core/modules/forum/config/optional/field.field.comment.comment_forum.commented_node.yml
new file mode 100644
index 0000000..9e10536
--- /dev/null
+++ b/core/modules/forum/config/optional/field.field.comment.comment_forum.commented_node.yml
@@ -0,0 +1,23 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - comment.type.comment_forum
+    - field.storage.comment.commented_node
+  module:
+    - entity_reference
+id: comment.comment_forum.commented_node
+field_name: commented_node
+entity_type: comment
+bundle: comment_forum
+label: Commented Node
+description: ''
+required: true
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings:
+  handler: 'default:node'
+  handler_settings: {  }
+third_party_settings: {  }
+field_type: entity_reference
diff --git a/core/modules/forum/config/optional/field.storage.comment.commented_node.yml b/core/modules/forum/config/optional/field.storage.comment.commented_node.yml
new file mode 100644
index 0000000..2b34306
--- /dev/null
+++ b/core/modules/forum/config/optional/field.storage.comment.commented_node.yml
@@ -0,0 +1,18 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - comment
+    - entity_reference
+id: comment.commented_node
+field_name: commented_node
+entity_type: comment
+type: entity_reference
+settings:
+  target_type: node
+module: entity_reference
+locked: true
+cardinality: 1
+translatable: false
+indexes: {  }
+persist_with_no_fields: true
diff --git a/core/modules/forum/src/ForumIndexStorage.php b/core/modules/forum/src/ForumIndexStorage.php
index b50f29b..a19cd60 100644
--- a/core/modules/forum/src/ForumIndexStorage.php
+++ b/core/modules/forum/src/ForumIndexStorage.php
@@ -9,6 +9,7 @@
 use Drupal\comment\CommentInterface;
 use Drupal\Core\Database\Connection;
 use Drupal\node\NodeInterface;
+use Drupal\field\Entity\FieldStorageConfig;
 
 /**
  * Handles CRUD operations to {forum_index} table.
@@ -96,14 +97,18 @@ public function update(NodeInterface $node) {
    */
   public function updateIndex(NodeInterface $node) {
     $nid = $node->id();
-    $count = $this->database->query("SELECT COUNT(cid) FROM {comment_field_data} c INNER JOIN {forum_index} i ON c.entity_id = i.nid WHERE c.entity_id = :nid AND c.field_name = 'comment_forum' AND c.entity_type = 'node' AND c.status = :status AND c.default_langcode = 1", array(
+    $field_storage = FieldStorageConfig::loadByName('comment', 'commented_node');
+    $table_mapping = \Drupal::entityManager()->getStorage('comment')->getTableMapping();
+    $comment_entity_table = $table_mapping->getDedicatedDataTableName($field_storage);
+    $target_id_column = $table_mapping->getFieldColumnName($field_storage, 'target_id');
+    $count = $this->database->query("SELECT COUNT(cid) FROM {comment_field_data} c INNER JOIN {" . $comment_entity_table . "} ce ON c.cid = ce.entity_id AND ce.deleted = 0 INNER JOIN {forum_index} i ON ce." . $target_id_column . " = i.nid WHERE ce." . $target_id_column . " = :nid AND c.field_name = 'comment_forum' AND c.entity_type = 'node' AND c.status = :status AND c.default_langcode = 1", array(
       ':nid' => $nid,
       ':status' => CommentInterface::PUBLISHED,
     ))->fetchField();
 
     if ($count > 0) {
       // Comments exist.
-      $last_reply = $this->database->queryRange("SELECT cid, name, created, uid FROM {comment_field_data} WHERE entity_id = :nid AND field_name = 'comment_forum' AND entity_type = 'node' AND status = :status AND default_langcode = 1 ORDER BY cid DESC", 0, 1, array(
+      $last_reply = $this->database->queryRange("SELECT cid, name, created, uid FROM {comment_field_data} c INNER JOIN {" . $comment_entity_table . "} ce ON c.cid = ce.entity_id AND ce.deleted = 0  WHERE ce." . $target_id_column . " = :nid AND c.field_name = 'comment_forum' AND c.entity_type = 'node' AND c.status = :status AND c.default_langcode = 1 ORDER BY c.cid DESC", 0, 1, array(
         ':nid' => $nid,
         ':status' => CommentInterface::PUBLISHED,
       ))->fetchObject();
diff --git a/core/modules/forum/src/Tests/ForumBlockTest.php b/core/modules/forum/src/Tests/ForumBlockTest.php
index 78e1c44..e883ba0 100644
--- a/core/modules/forum/src/Tests/ForumBlockTest.php
+++ b/core/modules/forum/src/Tests/ForumBlockTest.php
@@ -98,7 +98,7 @@ public function testActiveForumTopicsBlock() {
       $node = $this->drupalGetNodeByTitle($topics[$index]);
       $date->modify('+1 minute');
       $comment = entity_create('comment', array(
-        'entity_id' => $node->id(),
+        'commented_node' => $node->id(),
         'field_name' => 'comment_forum',
         'entity_type' => 'node',
         'node_type' => 'node_type_' . $node->bundle(),
diff --git a/core/modules/forum/src/Tests/ForumUninstallTest.php b/core/modules/forum/src/Tests/ForumUninstallTest.php
index db7c091..849fb6f 100644
--- a/core/modules/forum/src/Tests/ForumUninstallTest.php
+++ b/core/modules/forum/src/Tests/ForumUninstallTest.php
@@ -59,7 +59,7 @@ public function testForumUninstallWithField() {
 
     // Create at least one comment against the forum node.
     $comment = entity_create('comment', array(
-      'entity_id' => $node->nid->value,
+      'commented_node' => $node->nid->value,
       'entity_type' => 'node',
       'field_name' => 'comment_forum',
       'pid' => 0,
diff --git a/core/modules/forum/src/Tests/Views/ForumIntegrationTest.php b/core/modules/forum/src/Tests/Views/ForumIntegrationTest.php
index de169f6..5edb1d5 100644
--- a/core/modules/forum/src/Tests/Views/ForumIntegrationTest.php
+++ b/core/modules/forum/src/Tests/Views/ForumIntegrationTest.php
@@ -63,9 +63,9 @@ public function testForumIntegration() {
     $comments = array();
     foreach ($nodes as $index => $node) {
       for ($i = 0; $i <= $index; $i++) {
-        $comment = $comment_storage->create(array('entity_type' => 'node', 'entity_id' => $node->id(), 'field_name' => 'comment_forum'));
+        $comment = $comment_storage->create(array('entity_type' => 'node', 'commented_node' => $node->id(), 'field_name' => 'comment_forum'));
         $comment->save();
-        $comments[$comment->get('entity_id')->target_id][$comment->id()] = $comment;
+        $comments[$comment->get('commented_node')->target_id][$comment->id()] = $comment;
       }
     }
 
diff --git a/core/modules/hal/src/Tests/EntityTest.php b/core/modules/hal/src/Tests/EntityTest.php
index 9fb1014..8deb9c6 100644
--- a/core/modules/hal/src/Tests/EntityTest.php
+++ b/core/modules/hal/src/Tests/EntityTest.php
@@ -174,7 +174,7 @@ public function testComment() {
         'value' => $this->randomMachineName(),
         'format' => NULL,
       ],
-      'entity_id' => $node->id(),
+      'entity_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
     ));
@@ -187,7 +187,7 @@ public function testComment() {
         'value' => $this->randomMachineName(),
         'format' => NULL,
       ],
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment',
       'pid' => $parent_comment->id(),
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityCommentType.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityCommentType.php
index 79be04b..9e81798 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityCommentType.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityCommentType.php
@@ -22,6 +22,7 @@ class EntityCommentType extends EntityConfigBase {
   public function import(Row $row, array $old_destination_id_values = array()) {
     $entity_ids = parent::import($row, $old_destination_id_values);
     \Drupal::service('comment.manager')->addBodyField(reset($entity_ids));
+    \Drupal::service('comment.manager')->addEntityField(reset($entity_ids));
     return $entity_ids;
   }
 
diff --git a/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml
index 94fb020..93ff138 100644
--- a/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml
+++ b/core/modules/migrate_drupal/config/optional/migrate.migration.d6_comment.yml
@@ -12,7 +12,7 @@ process:
     plugin: migration
     migration: d6_comment
     source: pid
-  entity_id: nid
+  'commented_node/target_id': nid
   entity_type: 'constants/entity_type'
   # field_name & comment_type is calculated in
   # \Drupal\migrate_drupal\Plugin\migrate\source\d6\Comment::prepareRow()
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php
index 2c0e9c5..a04cc41 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php
@@ -22,7 +22,7 @@ class MigrateCommentTest extends MigrateDrupal6TestBase {
 
   use CommentTestTrait;
 
-  static $modules = array('node', 'comment', 'text', 'filter');
+  static $modules = array('node', 'comment', 'text', 'filter', 'entity_reference');
 
   /**
    * {@inheritdoc}
@@ -43,6 +43,7 @@ protected function setUp() {
       'target_entity_type_id' => 'node',
     ))->save();
     \Drupal::service('comment.manager')->addBodyField('comment_no_subject');
+    \Drupal::service('comment.manager')->addEntityField('comment_no_subject');
 
     $node = entity_create('node', array(
       'type' => 'story',
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTypeTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTypeTest.php
index 6a4560b..4c16379 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTypeTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTypeTest.php
@@ -18,7 +18,7 @@
  */
 class MigrateCommentTypeTest extends MigrateDrupal6TestBase {
 
-  static $modules = array('node', 'comment', 'text', 'filter');
+  static $modules = array('node', 'comment', 'text', 'filter', 'entity_reference');
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/node/src/Tests/NodeAccessPagerTest.php b/core/modules/node/src/Tests/NodeAccessPagerTest.php
index 6d1f90c..dd0c4c1 100644
--- a/core/modules/node/src/Tests/NodeAccessPagerTest.php
+++ b/core/modules/node/src/Tests/NodeAccessPagerTest.php
@@ -46,7 +46,7 @@ public function testCommentPager() {
     // Create 60 comments.
     for ($i = 0; $i < 60; $i++) {
       $comment = entity_create('comment', array(
-        'entity_id' => $node->id(),
+        'commented_node' => $node->id(),
         'entity_type' => 'node',
         'field_name' => 'comment',
         'subject' => $this->randomMachineName(),
diff --git a/core/modules/rdf/src/Tests/CommentAttributesTest.php b/core/modules/rdf/src/Tests/CommentAttributesTest.php
index e678de2..be1108d 100644
--- a/core/modules/rdf/src/Tests/CommentAttributesTest.php
+++ b/core/modules/rdf/src/Tests/CommentAttributesTest.php
@@ -341,7 +341,7 @@ function _testBasicCommentRdfaMarkup($graph, CommentInterface $comment, $account
    */
   function saveComment($nid, $uid, $contact = NULL, $pid = 0) {
     $values = array(
-      'entity_id' => $nid,
+      'commented_node' => $nid,
       'entity_type' => 'node',
       'field_name' => 'comment',
       'uid' => $uid,
diff --git a/core/modules/rdf/src/Tests/StandardProfileTest.php b/core/modules/rdf/src/Tests/StandardProfileTest.php
index 784bd80..af3f9de 100644
--- a/core/modules/rdf/src/Tests/StandardProfileTest.php
+++ b/core/modules/rdf/src/Tests/StandardProfileTest.php
@@ -498,7 +498,7 @@ protected function assertRdfaNodeCommentProperties($graph) {
    */
   protected function saveComment($nid, $uid, $contact = NULL, $pid = 0) {
     $values = array(
-      'entity_id' => $nid,
+      'commented_node' => $nid,
       'entity_type' => 'node',
       'field_name' => 'comment',
       'uid' => $uid,
diff --git a/core/modules/system/src/Tests/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php b/core/modules/system/src/Tests/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
index 45e0e92..fd8a6fe 100644
--- a/core/modules/system/src/Tests/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
@@ -376,7 +376,7 @@ public function testCommentHandler() {
 
     $comment_values = array(
       'published_published' => array(
-        'entity_id' => $nodes['published']->id(),
+        'commented_node' => $nodes['published']->id(),
         'entity_type' => 'node',
         'field_name' => 'comment',
         'uid' => 1,
@@ -387,7 +387,7 @@ public function testCommentHandler() {
         'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       ),
       'published_unpublished' => array(
-        'entity_id' => $nodes['published']->id(),
+        'commented_node' => $nodes['published']->id(),
         'entity_type' => 'node',
         'field_name' => 'comment',
         'uid' => 1,
@@ -398,7 +398,7 @@ public function testCommentHandler() {
         'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       ),
       'unpublished_published' => array(
-        'entity_id' => $nodes['unpublished']->id(),
+        'commented_node' => $nodes['unpublished']->id(),
         'entity_type' => 'node',
         'field_name' => 'comment',
         'uid' => 1,
diff --git a/core/modules/tracker/tracker.module b/core/modules/tracker/tracker.module
index fdd61f4..2a15525 100644
--- a/core/modules/tracker/tracker.module
+++ b/core/modules/tracker/tracker.module
@@ -95,7 +95,7 @@ function tracker_cron() {
       // so don't add an aggregate field.
       $result = \Drupal::entityQueryAggregate('comment')
         ->condition('entity_type', 'node')
-        ->condition('entity_id', $node->id())
+        ->condition('commented_node', $node->id())
         ->condition('uid', $node->getOwnerId(), '<>')
         ->condition('status', CommentInterface::PUBLISHED)
         ->groupBy('uid')
@@ -323,7 +323,7 @@ function _tracker_remove($nid, $uid = NULL, $changed = NULL) {
       // Check if the user has commented at least once on the given nid.
       $keep_subscription = \Drupal::entityQuery('comment')
         ->condition('entity_type', 'node')
-        ->condition('entity_id', $nid)
+        ->condition('commented_node', $nid)
         ->condition('uid', $uid)
         ->condition('status', CommentInterface::PUBLISHED)
         ->range(0, 1)
diff --git a/core/modules/views/src/Tests/DefaultViewsTest.php b/core/modules/views/src/Tests/DefaultViewsTest.php
index 4ef5091..397073d 100644
--- a/core/modules/views/src/Tests/DefaultViewsTest.php
+++ b/core/modules/views/src/Tests/DefaultViewsTest.php
@@ -95,7 +95,7 @@ protected function setUp() {
       $comment = array(
         'uid' => $user->id(),
         'status' => CommentInterface::PUBLISHED,
-        'entity_id' => $node->id(),
+        'commented_node' => $node->id(),
         'entity_type' => 'node',
         'field_name' => 'comment'
       );
diff --git a/core/modules/views/src/Tests/Entity/FieldEntityTest.php b/core/modules/views/src/Tests/Entity/FieldEntityTest.php
index 404434f..464d67c 100644
--- a/core/modules/views/src/Tests/Entity/FieldEntityTest.php
+++ b/core/modules/views/src/Tests/Entity/FieldEntityTest.php
@@ -61,7 +61,7 @@ public function testGetEntity() {
     $node->save();
     $comment = entity_create('comment', array(
       'uid' => $account->id(),
-      'entity_id' => $node->id(),
+      'commented_node' => $node->id(),
       'entity_type' => 'node',
       'field_name' => 'comment'
     ));
diff --git a/core/modules/views/src/Tests/Handler/HandlerTest.php b/core/modules/views/src/Tests/Handler/HandlerTest.php
index f084f90..4bd0293 100644
--- a/core/modules/views/src/Tests/Handler/HandlerTest.php
+++ b/core/modules/views/src/Tests/Handler/HandlerTest.php
@@ -243,25 +243,25 @@ public function testRelationshipUI() {
         $options[] = $item->attributes()->value;
       }
     }
-    $expected_options = array('none', 'nid');
+    $expected_options = array('none', 'commented_node');
     $this->assertEqual($options, $expected_options);
 
     // Remove the relationship and make sure no relationship option appears.
-    $this->drupalPostForm('admin/structure/views/nojs/handler/test_handler_relationships/default/relationship/nid', array(), t('Remove'));
+    $this->drupalPostForm('admin/structure/views/nojs/handler/test_handler_relationships/default/relationship/commented_node', array(), t('Remove'));
     $this->drupalGet($handler_options_path);
     $this->assertNoFieldByName($relationship_name, NULL, 'Make sure that no relationship option is available');
 
     // Create a view of comments with node relationship.
     View::create(['base_table' => 'comment_field_data', 'id' => 'test_get_entity_type'])->save();
-    $this->drupalPostForm('admin/structure/views/nojs/add-handler/test_get_entity_type/default/relationship', ['name[comment_field_data.node]' => 'comment_field_data.node'], t('Add and configure relationships'));
+    $this->drupalPostForm('admin/structure/views/nojs/add-handler/test_get_entity_type/default/relationship', ['name[comment__commented_node.commented_node]' => 'comment__commented_node.commented_node'], t('Add and configure relationships'));
     $this->drupalPostForm(NULL, [], t('Apply'));
     // Add a content type filter.
     $this->drupalPostForm('admin/structure/views/nojs/add-handler/test_get_entity_type/default/filter', ['name[node_field_data.type]' => 'node_field_data.type'], t('Add and configure filter criteria'));
-    $this->assertOptionSelected('edit-options-relationship', 'node');
+    $this->assertOptionSelected('edit-options-relationship', 'commented_node');
     $this->drupalPostForm(NULL, ['options[value][page]' => 'page'], t('Apply'));
     // Check content type filter options.
     $this->drupalGet('admin/structure/views/nojs/handler/test_get_entity_type/default/filter/type');
-    $this->assertOptionSelected('edit-options-relationship', 'node');
+    $this->assertOptionSelected('edit-options-relationship', 'commented_node');
     $this->assertFieldChecked('edit-options-value-page');
   }
 
@@ -274,7 +274,7 @@ public function testSetRelationship() {
     // Setup a broken relationship.
     $view->addHandler('default', 'relationship', $this->randomMachineName(), $this->randomMachineName(), array(), 'broken_relationship');
     // Setup a valid relationship.
-    $view->addHandler('default', 'relationship', 'comment_field_data', 'node', array('relationship' => 'cid'), 'valid_relationship');
+    $view->addHandler('default', 'relationship', 'comment__commented_node', 'commented_node', array('relationship' => 'reverse__comment__commented_node'), 'valid_relationship');
     $view->initHandlers();
     $field = $view->field['title'];
 
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_destroy.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_destroy.yml
index bf0df9a..6edaf47 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_destroy.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_destroy.yml
@@ -165,22 +165,27 @@ display:
       query:
         type: views_query
       relationships:
-        comment_cid:
-          field: comment_cid
-          id: comment_cid
+        reverse__comment__commented_node:
+          id: reverse__comment__commented_node
           table: node_field_data
-          plugin_id: standard
+          field: reverse__comment__commented_node
+          relationship: none
+          group_type: group
+          admin_label: Comments
+          required: false
+          entity_type: node
+          plugin_id: entity_reverse
         pid:
           field: pid
           id: pid
           table: comment_field_data
-          relationship: comment_cid
+          relationship: reverse__comment__commented_node
           plugin_id: standard
         uid:
           field: uid
           id: uid
           table: comment_field_data
-          relationship: comment_cid
+          relationship: reverse__comment__commented_node
           plugin_id: standard
       sorts:
         last_comment_name:
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_get_entity.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_get_entity.yml
index cc3b66c..20e790c 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_get_entity.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_get_entity.yml
@@ -34,7 +34,7 @@ display:
           field: nid
           id: nid
           table: node_field_data
-          relationship: node
+          relationship: commented_node
           plugin_id: field
           entity_type: node
           entity_field: nid
@@ -55,18 +55,21 @@ display:
       query:
         type: views_query
       relationships:
-        node:
-          field: node
-          id: node
+        commented_node:
+          id: commented_node
+          table: comment__commented_node
+          field: commented_node
+          relationship: none
+          group_type: group
+          admin_label: 'commented_node: Content'
           required: true
-          table: comment_field_data
           plugin_id: standard
         uid:
           admin_label: Author
           field: uid
           group_type: group
           id: uid
-          relationship: node
+          relationship: commented_node
           required: false
           table: node_field_data
           plugin_id: standard
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_handler_relationships.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_handler_relationships.yml
index 1c4c7ac..38b278b 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_handler_relationships.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_handler_relationships.yml
@@ -23,16 +23,24 @@ display:
           entity_type: node
           entity_field: title
       relationships:
-        comment_cid:
-          id: comment_cid
+        reverse__comment__commented_node:
+          id: reverse__comment__commented_node
           table: node_field_data
-          field: comment_cid
-          plugin_id: standard
-        nid:
-          id: nid
-          table: comment_field_data
-          field: node
-          relationship: comment_cid
+          field: reverse__comment__commented_node
+          relationship: none
+          group_type: group
+          admin_label: Comments
+          required: false
+          entity_type: node
+          plugin_id: entity_reverse
+        commented_node:
+          id: commented_node
+          table: comment__commented_node
+          field: commented_node
+          relationship: reverse__comment__commented_node
+          group_type: group
+          admin_label: Content
+          required: false
           plugin_id: standard
     display_plugin: default
     display_title: Master
diff --git a/core/profiles/standard/config/install/field.field.comment.comment.commented_node.yml b/core/profiles/standard/config/install/field.field.comment.comment.commented_node.yml
new file mode 100644
index 0000000..a579ec5
--- /dev/null
+++ b/core/profiles/standard/config/install/field.field.comment.comment.commented_node.yml
@@ -0,0 +1,23 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - comment.type.comment
+    - field.storage.comment.commented_node
+  module:
+    - entity_reference
+id: comment.comment.commented_node
+field_name: commented_node
+entity_type: comment
+bundle: comment
+label: Commented Node
+description: ''
+required: true
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings:
+  handler: 'default:node'
+  handler_settings: {  }
+third_party_settings: {  }
+field_type: entity_reference
diff --git a/core/profiles/standard/config/install/field.storage.comment.commented_node.yml b/core/profiles/standard/config/install/field.storage.comment.commented_node.yml
new file mode 100644
index 0000000..2b34306
--- /dev/null
+++ b/core/profiles/standard/config/install/field.storage.comment.commented_node.yml
@@ -0,0 +1,18 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - comment
+    - entity_reference
+id: comment.commented_node
+field_name: commented_node
+entity_type: comment
+type: entity_reference
+settings:
+  target_type: node
+module: entity_reference
+locked: true
+cardinality: 1
+translatable: false
+indexes: {  }
+persist_with_no_fields: true
