private void UpdateOwnedTypes(IMutableEntityType entityType) { var ownerships = entityType.GetDeclaredReferencingForeignKeys().Where(fk => fk.IsOwnership && fk.IsUnique) .ToList(); foreach (var ownership in ownerships) { var ownedType = ownership.DeclaringEntityType; var oldPrincipalKey = ownership.PrincipalKey; if (!oldPrincipalKey.IsPrimaryKey()) { ownership.SetProperties( (IReadOnlyList <Property>)ownership.Properties, ownership.PrincipalEntityType.FindPrimaryKey()); if (oldPrincipalKey is IConventionKey conventionKey && conventionKey.GetConfigurationSource() == ConfigurationSource.Convention) { oldPrincipalKey.DeclaringEntityType.RemoveKey(oldPrincipalKey); } foreach (var oldProperty in oldPrincipalKey.Properties) { if (oldProperty is IConventionProperty conventionProperty && conventionProperty.GetConfigurationSource() == ConfigurationSource.Convention) { oldProperty.DeclaringEntityType.RemoveProperty(oldProperty); } } } if (ownedType.FindPrimaryKey() == null) { foreach (var mutableProperty in ownership.Properties) { if (mutableProperty.IsNullable) { mutableProperty.IsNullable = false; } } ownedType.SetPrimaryKey(ownership.Properties); } UpdateOwnedTypes(ownedType); } }