using System; using System.Configuration; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Reflection; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Migrator.Framework; namespace Migrator.Web { /// /// Web form that can be used to run migrations in a web project. /// It's recommended that you have some security in place. /// public class Default : Page { protected Label _LatestVersion; protected DropDownList _availableVersions; protected Button _runMigration; protected void PageInit(object sender, EventArgs e) { } protected void PageExit(object sender, EventArgs e) { } private void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { this.BindForm(); } } private void RunMigration(object sender, EventArgs e) { Migrator mig = GetMigrator(); mig.MigrateTo(int.Parse(this._availableVersions.SelectedValue)); this.BindForm(); } protected override void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Load += new System.EventHandler(Page_Load); this.Init += new System.EventHandler(PageInit); this.Unload += new System.EventHandler(PageExit); this._runMigration.Click += new EventHandler(RunMigration); } private void BindForm(){ Migrator mig = GetMigrator(); List appliedMigrations = mig.AppliedMigrations; long latestMigration = 0; if(appliedMigrations.Count > 0) { latestMigration = appliedMigrations[appliedMigrations.Count - 1]; } this._LatestVersion.Text = latestMigration.ToString(); List availableMigrations = GetMigrationsList(mig); this._availableVersions.DataSource = availableMigrations; this._availableVersions.DataValueField = "ID"; this._availableVersions.DataTextField = "ClassName"; this._availableVersions.DataBind(); } private Migrator GetMigrator() { Assembly asm = Assembly.LoadFrom(ConfigurationManager.AppSettings["MigrationAsembly"]); string provider = ConfigurationManager.AppSettings["MigrationProvider"]; string connectString = ConfigurationManager.AppSettings["ConnectionString"]; Migrator migrator = new Migrator(provider, connectString, asm, false); return migrator; } private List GetMigrationsList(Migrator mig) { List migrations = mig.MigrationsTypes; migrations.Reverse(); List list = new List(); List.Enumerator en = migrations.GetEnumerator(); while(en.MoveNext()){ MigrationInfo info = new MigrationInfo(en.Current); list.Add(info); } return list; } public class MigrationInfo { private Type _type; public MigrationInfo(Type type) { this._type = type; } public Type MigrationType { get{ return _type; } } public long ID { get{ return MigrationLoader.GetMigrationVersion(_type); } } public string ClassName { get{ return _type.ToString() + " (" + ID + ")"; } } } } }