57 lines
1.5 KiB
C#
57 lines
1.5 KiB
C#
using FluentMigrator.Expressions;
|
|
using FluentMigrator.Model;
|
|
using FluentMigrator.Runner.Conventions;
|
|
|
|
namespace Nop.Data.Migrations;
|
|
|
|
/// <summary>
|
|
/// Convention for the default naming of an index
|
|
/// </summary>
|
|
public class NopIndexConvention : IIndexConvention
|
|
{
|
|
#region Fields
|
|
|
|
protected readonly INopDataProvider _dataProvider;
|
|
|
|
#endregion
|
|
|
|
#region Ctor
|
|
|
|
public NopIndexConvention(INopDataProvider dataProvider)
|
|
{
|
|
_dataProvider = dataProvider;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Utilities
|
|
|
|
/// <summary>
|
|
/// Gets the default name of an index
|
|
/// </summary>
|
|
/// <param name="index">The index definition</param>
|
|
/// <returns>Name of an index</returns>
|
|
protected virtual string GetIndexName(IndexDefinition index)
|
|
{
|
|
return _dataProvider.GetIndexName(index.TableName, string.Join('_', index.Columns.Select(c => c.Name)));
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
/// <summary>
|
|
/// Applies a convention to a FluentMigrator.Expressions.IIndexExpression
|
|
/// </summary>
|
|
/// <param name="expression">The expression this convention should be applied to</param>
|
|
/// <returns>The same or a new expression. The underlying type must stay the same.</returns>
|
|
public IIndexExpression Apply(IIndexExpression expression)
|
|
{
|
|
if (string.IsNullOrEmpty(expression.Index.Name))
|
|
expression.Index.Name = GetIndexName(expression.Index);
|
|
|
|
return expression;
|
|
}
|
|
|
|
#endregion
|
|
} |