Exemplo n.º 1
0
        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);
            }
        }