mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-12 16:13:58 -07:00
added better db migration support than what Subsonic provides out of the box.
This commit is contained in:
parent
180da4c82a
commit
ce63f05512
91 changed files with 7218 additions and 48 deletions
119
Migrator.net/Migrator.Framework/Migration.cs
Normal file
119
Migrator.net/Migrator.Framework/Migration.cs
Normal file
|
@ -0,0 +1,119 @@
|
|||
#region License
|
||||
|
||||
//The contents of this file are subject to the Mozilla Public License
|
||||
//Version 1.1 (the "License"); you may not use this file except in
|
||||
//compliance with the License. You may obtain a copy of the License at
|
||||
//http://www.mozilla.org/MPL/
|
||||
//Software distributed under the License is distributed on an "AS IS"
|
||||
//basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
//License for the specific language governing rights and limitations
|
||||
//under the License.
|
||||
|
||||
#endregion
|
||||
|
||||
namespace Migrator.Framework
|
||||
{
|
||||
/// <summary>
|
||||
/// A migration is a group of transformation applied to the database schema
|
||||
/// (or sometimes data) to port the database from one version to another.
|
||||
/// The <c>Up()</c> method must apply the modifications (eg.: create a table)
|
||||
/// and the <c>Down()</c> method must revert, or rollback the modifications
|
||||
/// (eg.: delete a table).
|
||||
/// <para>
|
||||
/// Each migration must be decorated with the <c>[Migration(0)]</c> attribute.
|
||||
/// Each migration number (0) must be unique, or else a
|
||||
/// <c>DuplicatedVersionException</c> will be trown.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// All migrations are executed inside a transaction. If an exception is
|
||||
/// thrown, the transaction will be rolledback and transformations wont be
|
||||
/// applied.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// It is best to keep a limited number of transformation inside a migration
|
||||
/// so you can easely move from one version of to another with fine grain
|
||||
/// modifications.
|
||||
/// You should give meaningful name to the migration class and prepend the
|
||||
/// migration number to the filename so they keep ordered, eg.:
|
||||
/// <c>002_CreateTableTest.cs</c>.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Use the <c>Database</c> property to apply transformation and the
|
||||
/// <c>Logger</c> property to output informations in the console (or other).
|
||||
/// For more details on transformations see
|
||||
/// <see cref="ITransformationProvider">ITransformationProvider</see>.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// The following migration creates a new Customer table.
|
||||
/// (File <c>003_AddCustomerTable.cs</c>)
|
||||
/// <code>
|
||||
/// [Migration(3)]
|
||||
/// public class AddCustomerTable : Migration
|
||||
/// {
|
||||
/// public override void Up()
|
||||
/// {
|
||||
/// Database.AddTable("Customer",
|
||||
/// new Column("Name", typeof(string), 50),
|
||||
/// new Column("Address", typeof(string), 100)
|
||||
/// );
|
||||
/// }
|
||||
/// public override void Down()
|
||||
/// {
|
||||
/// Database.RemoveTable("Customer");
|
||||
/// }
|
||||
/// }
|
||||
/// </code>
|
||||
/// </example>
|
||||
public abstract class Migration : IMigration
|
||||
{
|
||||
private ITransformationProvider _transformationProvider;
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return StringUtils.ToHumanName(GetType().Name); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines tranformations to port the database to the current version.
|
||||
/// </summary>
|
||||
public abstract void Up();
|
||||
|
||||
/// <summary>
|
||||
/// This is run after the Up transaction has been committed
|
||||
/// </summary>
|
||||
public virtual void AfterUp()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines transformations to revert things done in <c>Up</c>.
|
||||
/// </summary>
|
||||
public abstract void Down();
|
||||
|
||||
/// <summary>
|
||||
/// This is run after the Down transaction has been committed
|
||||
/// </summary>
|
||||
public virtual void AfterDown()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the database.
|
||||
/// <see cref="ITransformationProvider"></see>.
|
||||
/// </summary>
|
||||
/// <seealso cref="ITransformationProvider">Migration.Framework.ITransformationProvider</seealso>
|
||||
public ITransformationProvider Database
|
||||
{
|
||||
get { return _transformationProvider; }
|
||||
set { _transformationProvider = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This gets called once on the first migration object.
|
||||
/// </summary>
|
||||
public virtual void InitializeOnce(string[] args)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue