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); }
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); }
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 не поддерживает каскадное обновление"); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }