コード例 #1
0
 public static ICreateTableColumnOptionOrWithColumnSyntax CreateEntityTable(
     this FluentMigrator.Migration migration, string tableName)
 {
     return(migration.Create.Table(tableName)
            .WithColumn("Id").AsInt64().PrimaryKey()
            .WithColumn("[Version]").AsInt32().NotNullable()
            .WithColumn("Created").AsDateTime().NotNullable());
 }
コード例 #2
0
        public static void EnforceForeignKey(this FluentMigrator.Migration migration, string fromTable, string toTable)
        {
            var keyName = $"FK_{fromTable}_{toTable}";

            migration.Create.ForeignKey(keyName)
            .FromTable(fromTable)
            .ForeignColumn($"{toTable}Id")
            .ToTable(toTable)
            .PrimaryColumn("Id");
        }
コード例 #3
0
        public static string GetConfigurtedDatabaseType(this FluentMigrator.Migration migration)
        {
            var configuredDatabaseType = string.Empty;

            migration.IfDatabase(s =>
            {
                configuredDatabaseType = s;
                return(true);
            });

            return(configuredDatabaseType);
        }
コード例 #4
0
        public static ICreateSequenceSyntax WithTableSequence(
            this ICreateTableColumnOptionOrWithColumnSyntax tableSyntax, FluentMigrator.Migration migration)
        {
            var expression   = ((CreateTableExpressionBuilder)tableSyntax).Expression;
            var fromTable    = expression.TableName;
            var schemaName   = expression.SchemaName;
            var sequenceName = $"{fromTable}_seq";

            return(migration.Create
                   .Sequence(sequenceName.ToLower())
                   .InSchema(schemaName)
                   .MaxValue(int.MaxValue).IncrementBy(1));
        }
コード例 #5
0
        public static string GeneratePkName(this FluentMigrator.Migration migration, string primaryTableName, string idColumn)
        {
            const string prefix  = "PK_";
            const string postfix = "";

            var pkName = $"{prefix}{primaryTableName}_{idColumn}{postfix}";

            if (pkName.Length > 30)
            {
                pkName = $"{prefix}{GetShortNameOfTableName(primaryTableName)}_{GetShortNameOfTableName(idColumn)}{postfix}";
            }
            return(pkName);
        }
コード例 #6
0
        public static string GenerateFkName(this FluentMigrator.Migration migrationModel, string primaryTableName, string fromTableName)
        {
            const string prefix  = "FK_";
            const string postfix = "";


            var fkName = $"{prefix}{fromTableName}_{primaryTableName}{postfix}";

            if (fkName.Length > 30)
            {
                fkName = $"{prefix}{GetShortNameOfTableName(fromTableName)}_{GetShortNameOfTableName(primaryTableName)}{postfix}";
            }
            return(fkName);
        }
コード例 #7
0
        /// <summary>
        /// return Primary Key name
        /// </summary>
        /// <param name="migration"></param>
        /// <param name="primaryTableName"></param>
        /// <param name="idColumn"></param>
        /// <param name="schemaPrefix"></param>
        /// <returns></returns>
        public static string GeneratePkName(this FluentMigrator.Migration migration, string primaryTableName, string idColumn, string schemaPrefix = null)
        {
            const string prefix  = "";
            const string postfix = "_PK";

            var pkName = $"{prefix}{primaryTableName.GetPrefixedName(schemaPrefix)}_{idColumn}{postfix}";

            if (pkName.Length > 30)
            {
                var length = 13 - (schemaPrefix ?? "").Length / 2;
                pkName = $"{prefix}{GetShortNameOfTableName(primaryTableName, length).GetPrefixedName(schemaPrefix)}_{GetShortNameOfTableName(idColumn, length)}{postfix}";
            }
            return(pkName);
        }
コード例 #8
0
        /// <summary>
        /// return Foreign Key name
        /// </summary>
        /// <param name="migrationModel"></param>
        /// <param name="primaryTableName"></param>
        /// <param name="fromTableName"></param>
        /// <param name="schemaPrefix"></param>
        /// <returns></returns>
        public static string GenerateFkName(this FluentMigrator.Migration migrationModel, string primaryTableName, string fromTableName, string schemaPrefix = null)
        {
            const string prefix  = "FK_";
            const string postfix = "";

            var fkName = $"{prefix}{fromTableName.GetPrefixedName(schemaPrefix)}_{primaryTableName}{postfix}";

            if (fkName.Length > 30)
            {
                var length = 13 - (schemaPrefix ?? "").Length / 2;
                fkName = $"{prefix}{GetShortNameOfTableName(fromTableName, length).GetPrefixedName(schemaPrefix)}_{GetShortNameOfTableName(primaryTableName, length)}{postfix}";
            }
            return(fkName);
        }
コード例 #9
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);
        }
コード例 #10
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);
        }
コード例 #11
0
        public static ICreateTableColumnOptionOrWithColumnSyntax WithIdAsInt32Column(this ICreateTableWithColumnSyntax tableWithColumnSyntax, FluentMigrator.Migration migration)
        {
            var syntax = tableWithColumnSyntax.WithIdColumn(migration).AsInt32().NotNullable();

            return(syntax);
        }
コード例 #12
0
 public static ICreateTableColumnOptionOrWithColumnSyntax WithIdAsGuidColumn(this ICreateTableWithColumnSyntax tableWithColumnSyntax, FluentMigrator.Migration migration)
 {
     return(tableWithColumnSyntax.WithIdColumn(migration).AsGuid().NotNullable());
 }
コード例 #13
0
        public static ICreateTableColumnAsTypeSyntax WithIdColumn(this ICreateTableWithColumnSyntax tableWithColumnSyntax, FluentMigrator.Migration migration)
        {
            var expression = ((CreateTableExpressionBuilder)tableWithColumnSyntax).Expression;
            var syntax     = tableWithColumnSyntax
                             .WithColumn(ColumnName.Id);

            migration.Create
            .PrimaryKey(migration?.GeneratePkName(expression.TableName, ColumnName.Id))
            .OnTable(expression.TableName)
            .WithSchema(expression.SchemaName)
            .Column(ColumnName.Id);
            return(syntax);
        }
コード例 #14
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));
        }
コード例 #15
0
 /// <summary>
 /// Execute Sql. If Sql contains line-breaks, sql is split into smaller sql statements and execute them separately
 /// </summary>
 /// <param name="migration"></param>
 /// <param name="sql"></param>
 public static void ExecuteSql(this FluentMigrator.Migration migration, string sql)
 {
     ExecuteSql(migration.Execute.Sql, sql);
 }
コード例 #16
0
        public static void ParaquickTables(this FluentMigrator.Builders.Create.ICreateExpressionRoot Create, FluentMigrator.Migration migration)
        {
            Create.Table("paraquick_companies")
            .WithColumn("id").AsParaType(ParaTypes.Key).PrimaryKey().Identity()
            .WithColumn("name").AsParaType(ParaTypes.Name)
            .WithColumn("user_name").AsParaType(ParaTypes.Name).Unique()
            .WithColumn("password").AsParaType(ParaTypes.Name)
            .WithColumn("hcp_xml").AsParaType(ParaTypes.Max).Nullable()
            .WithColumn("country").AsParaType(ParaTypes.Name).Nullable()
            .WithColumn("major").AsParaType(ParaTypes.Int32).Nullable()
            .WithColumn("minor").AsParaType(ParaTypes.Int32).Nullable();

            Create.Table("paraquick_session_statuses")
            .WithColumn("id").AsParaType(ParaTypes.Key).PrimaryKey()
            .WithColumn("name").AsParaType(ParaTypes.Name);

            migration.Insert.IntoTable("paraquick_session_statuses").Row(new { id = 1, name = "New" });
            migration.Insert.IntoTable("paraquick_session_statuses").Row(new { id = 2, name = "Open" });
            migration.Insert.IntoTable("paraquick_session_statuses").Row(new { id = 3, name = "Incomplete" });
            migration.Insert.IntoTable("paraquick_session_statuses").Row(new { id = 4, name = "Success" });
            migration.Insert.IntoTable("paraquick_session_statuses").Row(new { id = 5, name = "Error" });

            Create.Table("paraquick_sessions")
            .WithColumn("id").AsParaType(ParaTypes.Key).PrimaryKey().Identity()
            .WithColumn("company_id").AsParaType(ParaTypes.Key).ForeignKey("paraquick_companies", "id")
            .WithColumn("ticket").AsParaType(ParaTypes.GuidString).Unique()
            .WithColumn("create_date").AsParaType(ParaTypes.DateTime)
            .WithColumn("start_date").AsParaType(ParaTypes.DateTime).Nullable()
            .WithColumn("end_date").AsParaType(ParaTypes.DateTime).Nullable()
            .WithColumn("status_id").AsParaType(ParaTypes.Key).ForeignKey("paraquick_session_statuses", "id");

            Create.Table("paraquick_session_errors")
            .WithColumn("id").AsParaType(ParaTypes.Key).PrimaryKey().Identity()
            .WithColumn("session_id").AsParaType(ParaTypes.Key).ForeignKey("paraquick_sessions", "id")
            .WithColumn("date").AsParaType(ParaTypes.DateTime)
            .WithColumn("message").AsParaType(ParaTypes.LongText).Nullable();

            Create.Table("paraquick_message_types")
            .WithColumn("id").AsParaType(ParaTypes.Key).PrimaryKey().Identity()
            .WithColumn("name").AsParaType(ParaTypes.Name)
            .WithColumn("request_type_name").AsParaType(ParaTypes.Name)
            .WithColumn("response_type_name").AsParaType(ParaTypes.Name);

            migration.Insert.IntoTable("paraquick_message_types").Row(new { name = "CustomerAdd", request_type_name = "CustomerAddRqType", response_type_name = "CustomerAddRsType" });
            migration.Insert.IntoTable("paraquick_message_types").Row(new { name = "CustomerQuery", request_type_name = "CustomerQueryRqType", response_type_name = "CustomerQueryRsType" });
            migration.Insert.IntoTable("paraquick_message_types").Row(new { name = "CustomerMod", request_type_name = "CustomerModRqType", response_type_name = "CustomerModRsType" });
            migration.Insert.IntoTable("paraquick_message_types").Row(new { name = "EstimateAdd", request_type_name = "EstimateAddRqType", response_type_name = "EstimateAddRsType" });
            migration.Insert.IntoTable("paraquick_message_types").Row(new { name = "EstimateQuery", request_type_name = "EstimateQueryRqType", response_type_name = "EstimateQueryRsType" });
            migration.Insert.IntoTable("paraquick_message_types").Row(new { name = "EstimateMod", request_type_name = "EstimateModRqType", response_type_name = "EstimateModRsType" });

            Create.Table("paraquick_messages")
            .WithColumn("id").AsParaType(ParaTypes.Key).PrimaryKey().Identity()
            .WithColumn("session_id").AsParaType(ParaTypes.Key).ForeignKey("paraquick_sessions", "id")
            .WithColumn("message_set_sequence").AsParaType(ParaTypes.Int32)
            .WithColumn("message_sequence").AsParaType(ParaTypes.Int32)
            .WithColumn("message_type_id").AsParaType(ParaTypes.Key).ForeignKey("paraquick_message_types", "id")
            .WithColumn("application_entity_id").AsParaType(ParaTypes.Key)
            .WithColumn("request_id").AsParaType(ParaTypes.GuidString)
            .WithColumn("request_xml").AsParaType(ParaTypes.Max)
            .WithColumn("request_date").AsParaType(ParaTypes.DateTime)
            .WithColumn("response_xml").AsParaType(ParaTypes.Max).Nullable()
            .WithColumn("response_date").AsParaType(ParaTypes.DateTime).Nullable()
            .WithColumn("status_code").AsParaType(ParaTypes.Description).Nullable()
            .WithColumn("status_severity").AsParaType(ParaTypes.Note).Nullable()
            .WithColumn("status_message").AsParaType(ParaTypes.LongText).Nullable();

            Create.Index("uidx_paraquick_messages").OnTable("paraquick_messages")
            .OnColumn("session_id").Unique()
            .OnColumn("message_set_sequence").Unique()
            .OnColumn("message_sequence").Unique()
            .OnColumn("request_id").Unique();
        }