public OperationBuilderSurface <CreateForeignKeyConstraintOperation> ForeignKey(string name, Func <TColumns, IEnumerable <ConstraintColumnDefinition> > dependentColumns, string principalTable, string principalSchema = null, string principalCatalog = null, IEnumerable <string> principalColumns = null, CascadeRule onUpdate = CascadeRule.None, CascadeRule onDelete = CascadeRule.None) { var constraintColumnDefinitions = dependentColumns(_instance).ToList(); principalColumns = principalColumns ?? constraintColumnDefinitions.Select(x => x.Column); var op = new CreateForeignKeyConstraintOperation { Name = _operation.Name.MakeSubObjectName(name), PrincipalTable = new ObjectName { Catalog = principalCatalog ?? _operation.Name.Catalog, Schema = principalSchema ?? _operation.Name.Schema, Name = principalTable }, OnDelete = onDelete, OnUpdate = onUpdate, DependentColumns = constraintColumnDefinitions, PrincipalColumns = principalColumns.Select(x => new ConstraintColumnDefinition { Column = x }).ToList(), }; _operation.Constraints.Add(op); return(new OperationBuilderSurface <CreateForeignKeyConstraintOperation>(op)); }
public static OperationBuilderSurface <CreateForeignKeyConstraintOperation> AddForeignKey(this IMigrationBuilder builder, string keyName, string dependentTable, IEnumerable <string> dependentColumns, string principalTable, IEnumerable <string> principalColumns, string dependentSchema = null, string dependentCatalog = null, string principalCatalog = null, string principalSchema = null, CascadeRule onUpdate = CascadeRule.None, CascadeRule onDelete = CascadeRule.None) { var op = new CreateForeignKeyConstraintOperation { Name = new SubObjectName(dependentCatalog, dependentSchema, dependentTable, keyName), PrincipalTable = new ObjectName { Catalog = principalCatalog ?? dependentCatalog, Schema = principalSchema ?? dependentSchema, Name = principalTable }, OnDelete = onDelete, OnUpdate = onUpdate, DependentColumns = dependentColumns.Select(x => new ConstraintColumnDefinition { Column = x }).ToList(), PrincipalColumns = principalColumns.Select(x => new ConstraintColumnDefinition { Column = x }).ToList(), }; builder.AddOperation(op); return(new OperationBuilderSurface <CreateForeignKeyConstraintOperation>(op)); }