public override void AddForeignKey(string name, string primaryTable, string[] primaryColumns, string refTable,
            string[] refColumns, ForeignKeyConstraint constraint)
        {
            if (ConstraintExists(primaryTable, name))
            {
                Logger.Warn("Constraint {0} already exists", name);
                return;
            }

            List<string> command = new List<string>();
            command.Add("ALTER TABLE {0}".FormatWith(primaryTable));
            command.Add("ADD CONSTRAINT {0}".FormatWith(name));
            command.Add("FOREIGN KEY ({0})"
                .FormatWith(primaryColumns.ToCommaSeparatedString()));
            command.Add("REFERENCES {0} ({1})"
                .FormatWith(refTable, refColumns.ToCommaSeparatedString()));

            switch (constraint)
            {
                case ForeignKeyConstraint.Cascade:
                    command.Add("ON DELETE CASCADE");
                    break;
                //command.Add("NOVALIDATE");
            }

            string commandText = command.ToSeparatedString(" ");
            ExecuteNonQuery(commandText);
        }
Пример #2
0
 public void AddForeignKey(string name,
                           SchemaQualifiedObjectName primaryTable, string primaryColumn,
                           SchemaQualifiedObjectName refTable, string refColumn,
                           ForeignKeyConstraint onDeleteConstraint = ForeignKeyConstraint.NoAction,
                           ForeignKeyConstraint onUpdateConstraint = ForeignKeyConstraint.NoAction)
 {
     AddForeignKey(name,
                   primaryTable, new[] { primaryColumn },
                   refTable, new[] { refColumn },
                   onDeleteConstraint, onUpdateConstraint);
 }
Пример #3
0
        public virtual void AddForeignKey(string name,
                                          SchemaQualifiedObjectName primaryTable, string[] primaryColumns,
                                          SchemaQualifiedObjectName refTable, string[] refColumns,
                                          ForeignKeyConstraint onDeleteConstraint = ForeignKeyConstraint.NoAction,
                                          ForeignKeyConstraint onUpdateConstraint = ForeignKeyConstraint.NoAction)
        {
            string onDeleteConstraintResolved = fkActionMap.GetSqlOnDelete(onDeleteConstraint);
            string onUpdateConstraintResolved = fkActionMap.GetSqlOnUpdate(onUpdateConstraint);

            string sql = GetSqlAddForeignKey(name, primaryTable, primaryColumns, refTable, refColumns, onUpdateConstraintResolved, onDeleteConstraintResolved);

            ExecuteNonQuery(sql);
        }
        public override void AddForeignKey(string name, SchemaQualifiedObjectName primaryTable, string[] primaryColumns, SchemaQualifiedObjectName refTable, string[] refColumns, ForeignKeyConstraint onDeleteConstraint = ForeignKeyConstraint.NoAction, ForeignKeyConstraint onUpdateConstraint = ForeignKeyConstraint.NoAction)
        {
            if (onUpdateConstraint != ForeignKeyConstraint.NoAction)
            {
                throw new NotSupportedException("Oracle не поддерживает действий при обновлении внешнего ключа");
            }

            if (onDeleteConstraint == ForeignKeyConstraint.SetDefault)
            {
                throw new NotSupportedException("Oracle не поддерживает SET DEFAULT при удалении записи, на которую ссылается внешний ключ");
            }

            base.AddForeignKey(name, primaryTable, primaryColumns, refTable, refColumns, onDeleteConstraint, onUpdateConstraint);
        }
 // todo: написать тесты на добавление внешнего ключа с каскадным обновлением
 public override void AddForeignKey(string name, string primaryTable, string[] primaryColumns, string refTable, string[] refColumns, ForeignKeyConstraint onDeleteConstraint, ForeignKeyConstraint onUpdateConstraint)
 {
     throw new NotSupportedException("Oracle не поддерживает каскадное обновление");
 }
Пример #6
0
 /// <summary>
 /// Changes the DeleteConstraint behaviour for delete.
 /// </summary>
 /// <param name="foreignKeyConstraint">DeleteConstraint behaviour.</param>
 /// <returns>foreign key instance.</returns>
 public ForeignKey OnDelete(ForeignKeyConstraint foreignKeyConstraint)
 {
     DeleteConstraint = foreignKeyConstraint;
     return(this);
 }
Пример #7
0
 /// <summary>
 /// Changes the DeleteConstraint behaviour for delete.
 /// </summary>
 /// <param name="foreignKeyConstraint">DeleteConstraint behaviour.</param>
 /// <returns>foreign key instance.</returns>
 public ForeignKey OnUpdate(ForeignKeyConstraint foreignKeyConstraint)
 {
     UpdateConstraint = foreignKeyConstraint;
     return(this);
 }
Пример #8
0
 /// <summary>
 /// Changes the DeleteConstraint behaviour for delete.
 /// </summary>
 /// <param name="foreignKeyConstraint">DeleteConstraint behaviour.</param>
 /// <returns>foreign key instance.</returns>
 public ForeignKey OnUpdate(ForeignKeyConstraint foreignKeyConstraint)
 {
     UpdateConstraint = foreignKeyConstraint;
     return this;
 }
Пример #9
0
 /// <summary>
 /// Changes the DeleteConstraint behaviour for delete.
 /// </summary>
 /// <param name="foreignKeyConstraint">DeleteConstraint behaviour.</param>
 /// <returns>foreign key instance.</returns>
 public ForeignKey OnDelete(ForeignKeyConstraint foreignKeyConstraint)
 {
     DeleteConstraint = foreignKeyConstraint;
     return this;
 }
        public virtual void AddForeignKey(string name,
            SchemaQualifiedObjectName primaryTable, string[] primaryColumns,
            SchemaQualifiedObjectName refTable, string[] refColumns,
            ForeignKeyConstraint onDeleteConstraint = ForeignKeyConstraint.NoAction,
            ForeignKeyConstraint onUpdateConstraint = ForeignKeyConstraint.NoAction)
        {
            string onDeleteConstraintResolved = fkActionMap.GetSqlOnDelete(onDeleteConstraint);
            string onUpdateConstraintResolved = fkActionMap.GetSqlOnUpdate(onUpdateConstraint);

            string sql = GetSqlAddForeignKey(name, primaryTable, primaryColumns, refTable, refColumns, onUpdateConstraintResolved, onDeleteConstraintResolved);

            ExecuteNonQuery(sql);
        }
 public void AddForeignKey(string name,
     SchemaQualifiedObjectName primaryTable, string primaryColumn,
     SchemaQualifiedObjectName refTable, string refColumn,
     ForeignKeyConstraint onDeleteConstraint = ForeignKeyConstraint.NoAction,
     ForeignKeyConstraint onUpdateConstraint = ForeignKeyConstraint.NoAction)
 {
     AddForeignKey(name,
         primaryTable, new[] { primaryColumn },
         refTable, new[] { refColumn },
         onDeleteConstraint, onUpdateConstraint);
 }
Пример #12
0
        public override void AddForeignKey(string name, SchemaQualifiedObjectName primaryTable, string[] primaryColumns, SchemaQualifiedObjectName refTable, string[] refColumns, ForeignKeyConstraint onDeleteConstraint = ForeignKeyConstraint.NoAction, ForeignKeyConstraint onUpdateConstraint = ForeignKeyConstraint.NoAction)
        {
            if (onUpdateConstraint != ForeignKeyConstraint.NoAction)
            {
                throw new NotSupportedException("Oracle не поддерживает действий при обновлении внешнего ключа");
            }

            if (onDeleteConstraint == ForeignKeyConstraint.SetDefault)
            {
                throw new NotSupportedException("Oracle не поддерживает SET DEFAULT при удалении записи, на которую ссылается внешний ключ");
            }

            base.AddForeignKey(name, primaryTable, primaryColumns, refTable, refColumns, onDeleteConstraint, onUpdateConstraint);
        }