Files
Umbraco-CMS/src/Umbraco.Infrastructure/Migrations/Expressions/Create/ForeignKey/CreateForeignKeyBuilder.cs
2019-12-18 13:42:29 +01:00

88 lines
2.7 KiB
C#

using System.Data;
using Umbraco.Core.Migrations.Expressions.Common;
using Umbraco.Core.Migrations.Expressions.Common.Expressions;
namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
{
public class CreateForeignKeyBuilder : ExpressionBuilderBase<CreateForeignKeyExpression>,
ICreateForeignKeyFromTableBuilder,
ICreateForeignKeyForeignColumnBuilder,
ICreateForeignKeyToTableBuilder,
ICreateForeignKeyPrimaryColumnBuilder,
ICreateForeignKeyCascadeBuilder
{
public CreateForeignKeyBuilder(CreateForeignKeyExpression expression)
: base(expression)
{ }
/// <inheritdoc />
public void Do() => Expression.Execute();
/// <inheritdoc />
public ICreateForeignKeyForeignColumnBuilder FromTable(string table)
{
Expression.ForeignKey.ForeignTable = table;
return this;
}
/// <inheritdoc />
public ICreateForeignKeyToTableBuilder ForeignColumn(string column)
{
Expression.ForeignKey.ForeignColumns.Add(column);
return this;
}
/// <inheritdoc />
public ICreateForeignKeyToTableBuilder ForeignColumns(params string[] columns)
{
foreach (var column in columns)
Expression.ForeignKey.ForeignColumns.Add(column);
return this;
}
/// <inheritdoc />
public ICreateForeignKeyPrimaryColumnBuilder ToTable(string table)
{
Expression.ForeignKey.PrimaryTable = table;
return this;
}
/// <inheritdoc />
public ICreateForeignKeyCascadeBuilder PrimaryColumn(string column)
{
Expression.ForeignKey.PrimaryColumns.Add(column);
return this;
}
/// <inheritdoc />
public ICreateForeignKeyCascadeBuilder PrimaryColumns(params string[] columns)
{
foreach (var column in columns)
Expression.ForeignKey.PrimaryColumns.Add(column);
return this;
}
/// <inheritdoc />
public ICreateForeignKeyCascadeBuilder OnDelete(Rule rule)
{
Expression.ForeignKey.OnDelete = rule;
return this;
}
/// <inheritdoc />
public ICreateForeignKeyCascadeBuilder OnUpdate(Rule rule)
{
Expression.ForeignKey.OnUpdate = rule;
return this;
}
/// <inheritdoc />
public IExecutableBuilder OnDeleteOrUpdate(Rule rule)
{
Expression.ForeignKey.OnDelete = rule;
Expression.ForeignKey.OnUpdate = rule;
return new ExecutableBuilder(Expression);
}
}
}