diff --git a/profile.install b/profile.install
index 1f0e6d2..0f33b08 100644
--- a/profile.install
+++ b/profile.install
@@ -87,3 +87,28 @@ function profile_update_8003() {
 
   return t('Language code key removed from profile entity definition.');
 }
+
+/**
+ * Add the uid entity key to profiles.
+ */
+function profile_update_8004() {
+  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+  $entity_type = $definition_update_manager->getEntityType('menu_link_content');
+
+  $entity_keys = $entity_type->getKeys();
+  $entity_keys['uid'] = 'uid';
+  $entity_type->set('entity_keys', $entity_keys);
+  $definition_update_manager->updateEntityType($entity_type);
+
+  // @todo The above should be enough, since that is the only definition that
+  //   changed. But \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema varies
+  //   field schema by whether a field is an entity key, so invoke
+  //   EntityDefinitionUpdateManagerInterface::updateFieldStorageDefinition()
+  //   with an unmodified field storage definition to trigger the necessary
+  //   changes. SqlContentEntityStorageSchema::onEntityTypeUpdate() should be
+  //   fixed to automatically handle this.
+  //   @see https://www.drupal.org/node/2554245
+  $definition_update_manager->updateFieldStorageDefinition($definition_update_manager->getFieldStorageDefinition('uid', 'profile'));
+
+  return t('The uid entity key has been added to profiles.');
+}
diff --git a/src/Entity/Profile.php b/src/Entity/Profile.php
index 94e33d1..1a19ab2 100644
--- a/src/Entity/Profile.php
+++ b/src/Entity/Profile.php
@@ -48,6 +48,7 @@ use Drupal\user\UserInterface;
  *     "id" = "profile_id",
  *     "revision" = "revision_id",
  *     "bundle" = "type",
+ *     "uid" = "uid",
  *     "uuid" = "uuid"
  *   },
  *  links = {
@@ -264,7 +265,8 @@ class Profile extends ContentEntityBase implements ProfileInterface {
       ->setDescription(t('The user that owns this profile.'))
       ->setRevisionable(TRUE)
       ->setSetting('target_type', 'user')
-      ->setSetting('handler', 'default');
+      ->setSetting('handler', 'default')
+      ->setDefaultValueCallback('Drupal\profile\Entity\Profile::getCurrentUserId');
 
     $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Active'))
@@ -290,4 +292,16 @@ class Profile extends ContentEntityBase implements ProfileInterface {
     return $fields;
   }
 
+  /**
+   * Default value callback for 'uid' base field definition.
+   *
+   * @see ::baseFieldDefinitions()
+   *
+   * @return array
+   *   An array of default values.
+   */
+  public static function getCurrentUserId() {
+    return [\Drupal::currentUser()->id()];
+  }
+
 }
