diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
index af2ef3b..2e297ca 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
@@ -228,17 +228,23 @@ protected function attachPropertyData(array &$entities, $load_revision = FALSE)
 
       // Fetch the field definitions to check which field is translatable.
       $field_definition = $this->getFieldDefinitions(array());
+      $data_fields = array_flip($this->entityInfo['schema_fields_sql']['data_table']);
 
       foreach ($data as $values) {
         $id = $values[$this->idKey];
         // Field values in default language are stored with LANGUAGE_DEFAULT as
         // key.
         $langcode = empty($values['default_langcode']) ? $values['langcode'] : LANGUAGE_DEFAULT;
+        $translation = $entities[$id]->getTranslation($langcode);
 
-        foreach ($this->entityInfo['schema_fields_sql']['data_table'] as $name) {
+        foreach ($field_definition as $name => $definition) {
           // Set translatable properties only.
-          if (!empty($field_definition[$name]['translatable'])) {
-            $entities[$id]->getTranslation($langcode)->{$name}->value = $values[$name];
+          if (isset($data_fields[$name]) && !empty($definition['translatable'])) {
+            $translation->{$name}->value = $values[$name];
+          }
+          // Avoid initializing configurable fields before loading them.
+          elseif (!empty($definition['configurable'])) {
+            unset($entities[$id]->fields[$name]);
           }
         }
       }
