예제 #1
0
        public static string GetSqlEquivalent(this IMigrationExpression migrationExpression, IMigrationGenerator migrationGenerator)
        {
            if (migrationExpression is ExecuteSqlScriptExpression executeSqlScriptExpression)
            {
                return(executeSqlScriptExpression.SqlScript);
            }
            else if (migrationExpression is ExecuteSqlStatementExpression executeSqlStatementExpression)
            {
                return(executeSqlStatementExpression.SqlStatement);
            }
            else
            {
                if (migrationExpression is CreateForeignKeyExpression cfke)
                {
                    cfke.ForeignKey.ForeignColumns = cfke.ForeignKey.ForeignColumns.Select(c => c.ToSnakeCase()).ToList();
                    cfke.ForeignKey.PrimaryColumns = cfke.ForeignKey.PrimaryColumns.Select(c => c.ToSnakeCase()).ToList();
                    cfke.ForeignKey.ForeignTable   = cfke.ForeignKey.ForeignTable.ToSnakeCase();
                    cfke.ForeignKey.PrimaryTable   = cfke.ForeignKey.PrimaryTable.ToSnakeCase();
                    cfke.ForeignKey.Name           = cfke.ForeignKey.Name ??
                                                     $"FK_{cfke.ForeignKey.ForeignTable}_{cfke.ForeignKey.ForeignColumns.First()}_{cfke.ForeignKey.PrimaryTable}_{cfke.ForeignKey.PrimaryColumns.First()}";
                }
                else if (migrationExpression is CreateTableExpression cte)
                {
                    List <ColumnDefinition> columnDefinitions = cte.Columns.ToList();
                    columnDefinitions.ForEach(cd => cd.Name = cd.Name.ToSnakeCase());
                    cte.Columns = columnDefinitions;
                }
                else if (migrationExpression is CreateConstraintExpression cce && cce.Constraint.IsPrimaryKeyConstraint)
                {
                    cce.Constraint.Columns        = cce.Constraint.Columns.Select(c => c.ToSnakeCase()).ToList();
                    cce.Constraint.ConstraintName = $"PK_{cce.Constraint.TableName}";
                }
                MethodInfo processMethod = migrationGenerator.GetType().GetMethod("Generate", new[] { migrationExpression.GetType() });
                string     sql           = (string)processMethod.Invoke(migrationGenerator, new[] { migrationExpression });

                return(sql);
            }
        }
예제 #2
0
 public static string GetName([NotNull] this IMigrationGenerator generator)
 {
     return(generator.GetType().Name.Replace("Generator", string.Empty));
 }