protected virtual IEnumerable <MigrationOperation> Add([NotNull] IForeignKey target, [NotNull] DiffContext diffContext)
        {
            var declaringRootEntityType              = target.DeclaringEntityType.RootType();
            var targetEntityTypeAnnotations          = Annotations.For(declaringRootEntityType);
            var targetPrincipalEntityTypeAnnotations = Annotations.For(target.PrincipalEntityType.RootType());

            var operation = new AddForeignKeyOperation
            {
                Schema           = targetEntityTypeAnnotations.Schema,
                Table            = targetEntityTypeAnnotations.TableName,
                Name             = Annotations.For(target).Name,
                Columns          = GetColumns(target.Properties),
                PrincipalSchema  = targetPrincipalEntityTypeAnnotations.Schema,
                PrincipalTable   = targetPrincipalEntityTypeAnnotations.TableName,
                PrincipalColumns = GetColumns(target.PrincipalKey.Properties),
                OnDelete         = target.DeleteBehavior == DeleteBehavior.Cascade
                    ? ReferentialAction.Cascade
                    : target.DeleteBehavior == DeleteBehavior.SetNull
                        ? ReferentialAction.SetNull
                        : ReferentialAction.Restrict
            };

            CopyAnnotations(MigrationsAnnotations.For(target), operation);

            var createTableOperation = diffContext.FindCreate(declaringRootEntityType);

            if (createTableOperation != null)
            {
                createTableOperation.ForeignKeys.Add(operation);
            }
            else
            {
                yield return(operation);
            }
        }
        protected virtual IEnumerable <MigrationOperation> Add(IForeignKey target, DiffContext diffContext)
        {
            var declaringRootEntityType              = target.DeclaringEntityType.RootType();
            var targetEntityTypeAnnotations          = Annotations.For(declaringRootEntityType);
            var targetPrincipalEntityTypeAnnotations = Annotations.For(target.PrincipalEntityType.RootType());

            // TODO: Set OnDelete (See #1084)
            var operation = new AddForeignKeyOperation
            {
                Schema           = targetEntityTypeAnnotations.Schema,
                Table            = targetEntityTypeAnnotations.TableName,
                Name             = Annotations.For(target).Name,
                Columns          = GetColumns(target.Properties),
                PrincipalSchema  = targetPrincipalEntityTypeAnnotations.Schema,
                PrincipalTable   = targetPrincipalEntityTypeAnnotations.TableName,
                PrincipalColumns = GetColumns(target.PrincipalKey.Properties)
            };

            CopyAnnotations(MigrationsAnnotations.For(target), operation);

            var createTableOperation = diffContext.FindCreate(declaringRootEntityType);

            if (createTableOperation != null)
            {
                createTableOperation.ForeignKeys.Add(operation);
            }
            else
            {
                yield return(operation);
            }
        }