Created
September 5, 2011 15:48
-
-
Save moniyax/1195297 to your computer and use it in GitHub Desktop.
sample C# code to dump sql schema to a FluenMigrator migration file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Data; | |
using System.IO; | |
using System.Linq; | |
using System.Text; | |
using FluentMigrator; | |
using FluentMigrator.Model; | |
using FluentMigrator.SchemaDump.SchemaWriters; | |
namespace SampleApplication.SchemaDump | |
{ | |
public class RCDumpWriter : SchemaWriterBase | |
{ | |
public override void WriteToStream(ICollection<TableDefinition> tables, StreamWriter output) | |
{ | |
//int tableCount = tables.Count; | |
//int columnCount = tables.Select(t => t.Columns.Count).Sum(); | |
//int indexCount = tables.Select(t => t.Indexes.Count).Sum(); | |
//int keyCount = tables.Select(t => t.ForeignKeys.Count).Sum(); | |
//start writing a migration file | |
output.WriteLine("using System;"); | |
output.WriteLine("using System.Collections.Generic;"); | |
output.WriteLine("using System.Linq;"); | |
output.WriteLine("using System.Web;"); | |
output.WriteLine("using FluentMigrator;"); | |
output.WriteLine(String.Empty); | |
output.WriteLine("namespace MyAppNamespace.Migrations"); | |
output.WriteLine("{"); | |
output.WriteLine("\t[Migration(0)]"); | |
output.WriteLine("\tpublic class BaseMigration : Migration"); | |
output.WriteLine("\t{"); | |
output.WriteLine("\t\tpublic override void Up()"); | |
output.WriteLine("\t\t{"); | |
foreach (TableDefinition table in tables) | |
{ | |
WriteTable(table, output); | |
} | |
output.WriteLine("\t\t}"); //end method | |
output.WriteLine("\t\tpublic override void Down()"); | |
output.WriteLine("\t\t{"); | |
foreach (TableDefinition table in tables) | |
{ | |
WriteDeleteTable(table, output); | |
} | |
output.WriteLine("\t\t}"); //end method | |
output.WriteLine("\t}"); //end class | |
output.WriteLine(String.Empty); | |
output.WriteLine("}"); //end namespace | |
} | |
protected void WriteTable(TableDefinition table, StreamWriter output) | |
{ | |
output.WriteLine("\t\t\tCreate.Table(\"" + table.Name + "\")"); | |
foreach (ColumnDefinition column in table.Columns) | |
{ | |
WriteColumn(column, output, column==table.Columns.Last()); | |
} | |
} | |
protected void WriteDeleteTable(TableDefinition table, StreamWriter output) | |
{ | |
//Delete.Table("Bar"); | |
output.WriteLine("\t\t\tDelete.Table(\"" + table.Name + "\");"); | |
} | |
protected void WriteColumn(ColumnDefinition column, StreamWriter output, bool isLastColumn) | |
{ | |
string columnSyntax = ".WithColumn(\"" + column.Name + "\")"; | |
switch (column.Type) | |
{ | |
case DbType.Boolean: | |
columnSyntax += ".AsBoolean()"; | |
break; | |
case DbType.Int16: | |
columnSyntax += ".AsInt16()"; | |
break; | |
case DbType.Int32: | |
columnSyntax += ".AsInt32()"; | |
break; | |
default: | |
columnSyntax += ".AsString()"; | |
break; | |
} | |
if (column.IsIdentity) | |
columnSyntax += ".Identity()"; | |
else if (column.IsIndexed) | |
columnSyntax += ".Indexed()"; | |
if (!column.IsNullable) | |
columnSyntax += ".NotNullable()"; | |
if(isLastColumn) columnSyntax += ";"; | |
output.WriteLine("\t\t\t\t" + columnSyntax); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment