예제 #1
0
        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));
        }