diff -u b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php --- b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php @@ -2322,6 +2322,8 @@ // A dedicated table only contain rows for actual field values, and no // rows for entities where the field is empty. Thus, we can safely // enforce 'not null' on the columns for the field's required properties. + // Fields can have dynamic properties, so we need to make sure that the + // property is statically defined. if (isset($properties[$column_name])) { $data_schema['fields'][$real_name]['not null'] = $properties[$column_name]->isRequired(); } reverted: --- b/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php +++ a/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php @@ -1324,26 +1324,4 @@ } } - /** - * Tests uninstalling map item base field. - */ - public function testUninstallMapItemBaseField() { - $definitions['data_map'] = BaseFieldDefinition::create('map') - ->setLabel(t('Data')) - ->setRequired(TRUE); - - $this->state->set('entity_test_update.additional_base_field_definitions', $definitions); - - $this->entityDefinitionUpdateManager->installFieldStorageDefinition('data_map', 'entity_test_update', 'entity_test', $definitions['data_map']); - - $entity = EntityTestUpdate::create([ - 'data_map' => [ - 'key' => 'value', - ], - ]); - $entity->save(); - - $this->entityDefinitionUpdateManager->uninstallFieldStorageDefinition($definitions['data_map']); - } - } only in patch2: unchanged: --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Field/MapBaseFieldTest.php @@ -0,0 +1,65 @@ +entityDefinitionUpdateManager = $this->container->get('entity.definition_update_manager'); + + // Install every entity type's schema that wasn't installed in the parent + // method. + foreach (array_diff_key($this->entityTypeManager->getDefinitions(), array_flip(['user', 'entity_test'])) as $entity_type_id => $entity_type) { + $this->installEntitySchema($entity_type_id); + } + } + + /** + * Tests uninstalling map item base field. + */ + public function testUninstallMapItemBaseField() { + $definitions['data_map'] = BaseFieldDefinition::create('map') + ->setLabel(t('Data')) + ->setRequired(TRUE); + + $this->state->set('entity_test_update.additional_base_field_definitions', $definitions); + + $this->entityDefinitionUpdateManager->installFieldStorageDefinition('data_map', 'entity_test_update', 'entity_test', $definitions['data_map']); + + $entity = EntityTestUpdate::create([ + 'data_map' => [ + 'key' => 'value', + ], + ]); + $entity->save(); + + $this->entityDefinitionUpdateManager->uninstallFieldStorageDefinition($definitions['data_map']); + } + +}