コード例 #1
0
        public static IAlterTableColumnOptionOrAddColumnOrAlterColumnSyntax AddForeignKey(this IAlterTableAddColumnOrAlterColumnSyntax table, string primaryTableName, FluentMigrator.Migration migration)
        {
            var expression    = ((AlterTableExpressionBuilder)table).Expression;
            var fromTableName = expression.TableName;

            var fkName = migration.GenerateFkName(primaryTableName, fromTableName);

            return(table
                   .AddColumn(primaryTableName + ColumnName.Id).AsGuid()
                   .ForeignKey(fkName, primaryTableName, ColumnName.Id));
        }
コード例 #2
0
        /// <summary>
        /// Create a foreign columnName to the table <paramref name="primaryTableName"/><br/>
        /// ------------------------------------------------------------------ <br/>
        /// If <paramref name="columnName"/> is specified, the new column-name will follow that value<br/>
        /// If <paramref name="columnName"/> is unspecified, the new column-name will be computed<br/>
        /// <br/>
        /// If <paramref name="primaryColumnName"/> is specified, the primary-table-column will follow that value<br/>
        /// If <paramref name="primaryColumnName"/> is unspecified, the primary-table-column will be computed<br/>
        /// <br/>
        /// i.e:<br/>
        /// <paramref name="columnName"/> is unspecified and <paramref name="primaryTableName"/> is "Parent" => column-name will be computed to "ParentId"<br/>
        /// <br/>
        /// <paramref name="primaryColumnName"/> is unspecified => the primary-table-column will be "Id"<br/>
        /// </summary>
        /// <param name="syntax"></param>
        /// <param name="primaryTableName"></param>
        /// <param name="migration"></param>
        /// <param name="schemaPrefix"></param>
        /// <param name="columnName"></param>
        /// <param name="primaryColumnName"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        public static ICreateTableColumnAsTypeSyntax WithForeignKeyColumn(
            this ICreateTableWithColumnSyntax syntax,
            string primaryTableName,
            FluentMigrator.Migration migration,
            string schemaPrefix      = null,
            string columnName        = null,
            string primaryColumnName = null,
            params int[] errors)
        {
            var expression     = ((CreateTableExpressionBuilder)syntax).Expression;
            var fromTable      = expression.TableName.GetPrefixedName(schemaPrefix);
            var fromSchemaName = expression.SchemaName;
            var toSchemaName   = fromSchemaName;
            var split          = primaryTableName.Split('.');

            if (split.Length == 2)
            {
                primaryTableName = split[1];
                toSchemaName     = split[0];
            }

            var fkName = migration?.GenerateFkName(primaryTableName, fromTable.TrimPrefixName(schemaPrefix), schemaPrefix);

            columnName        = columnName ?? primaryTableName + ColumnName.Id;
            primaryColumnName = primaryColumnName ?? ColumnName.Id;
            var syntaxWithColumn = syntax.WithColumn(columnName);

            var fkSyntax = migration?.Create
                           .ForeignKey(fkName)
                           .FromTable(fromTable).InSchema(fromSchemaName)
                           .ForeignColumn(columnName)
                           .ToTable(primaryTableName).InSchema(toSchemaName)
                           .PrimaryColumn(primaryColumnName)
                           .OnDelete(Rule.SetNull);

            if (fkSyntax is CreateForeignKeyExpressionBuilder builder)
            {
                var id = $"{nameof(CreateForeignKeyExpression)}_{builder.Expression.ForeignKey.PrimaryTable}";
                AddOrUpdateErrorFilter(id, errors);

                var id2 = $"{nameof(CreateForeignKeyExpression)}_{builder.Expression.ForeignKey.ForeignTable}";
                AddOrUpdateErrorFilter(id2, errors);
            }

            return(syntaxWithColumn);
        }
コード例 #3
0
        public static ICreateTableColumnAsTypeSyntax WithForeignKeyColumn(
            this ICreateTableWithColumnSyntax table, string primaryTableName, FluentMigrator.Migration migration)
        {
            var expression = ((CreateTableExpressionBuilder)table).Expression;
            var fromTable  = expression.TableName;
            var schemaName = expression.SchemaName;

            var fkName = migration?.GenerateFkName(primaryTableName, fromTable);

            var foreignColumn = primaryTableName + ColumnName.Id;
            var syntax        = table.WithColumn(foreignColumn);

            migration?.Create
            .ForeignKey(fkName)
            .FromTable(fromTable)
            .InSchema(schemaName)
            .ForeignColumn(foreignColumn)
            .ToTable(primaryTableName)
            .InSchema(schemaName)
            .PrimaryColumn(ColumnName.Id)
            .OnDelete(Rule.SetNull);

            return(syntax);
        }