Соглашение об имени столбца - PullRequest
3 голосов
/ 15 апреля 2011

Я хочу указать соглашение об именах столбцов, которое в основном берет поле в паскалях и преобразует его в верхний регистр с подчеркиванием. Таким образом, свойство OrderId становится столбцом «ORDER_ID». Я также хочу, чтобы это соглашение применялось только в том случае, если я еще не указал его в отображении. Пока у меня есть скелет ниже:

public class PascalCaseColumnNameConvention : IPropertyConvention
{
    public bool Accept(IPropertyInstance instance)
    {
        //Not sure what I should have here
    }
    public void Apply(IPropertyInstance instance)
    {
        instance.Column(instance.Property.Name.ChangePascalCaseToUnderscore());
    }
}

Кроме того, есть ли лучший способ изменения регистра, кроме метода расширения строки? Какие-нибудь библиотеки, которые уже делают подобные вещи?

1 Ответ

1 голос
/ 15 апреля 2011

В методе Accept в этом случае вы должны просто return true.Этот метод должен решить, должно ли ваше соглашение применяться для данного экземпляра, например, вы можете изменить имя по умолчанию только для ваших int -типовых полей и т. Д. Если вы определяете общее соглашение, true означает просто«принять все случаи». Однако это можно переопределить, указав имя столбца в отображении.

Об изменении регистра - я тоже не знаю такой библиотеки.Но задача довольно проста, поэтому ваше решение здесь кажется очень разумным.

РЕДАКТИРОВАТЬ

Хорошо, какую версию FNH вы используете?Я не вижу в IPropertyConvention метода bool Accept.

Здесь вы можете реализовать как IPropertyConvention (только с void Apply), так и IPropertyConventionAcceptance (с методом Accept)работает немного по другому).Попробуйте что-то вроде этого (не тестировал):

public class PascalCaseColumnNameConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(x => !x.Columns.HasUserDefined());
    }

    public void Apply(IPropertyInstance instance)
    {
        instance.Column(instance.Property.Name.ChangePascalCaseToUnderscore());
    }
}

Я также обнаружил классный класс, выполняющий много полезных преобразований строк - см. Inflector .Но в любом случае, если вам нужно только это конкретное обращение, я бы остановился на собственном простом решении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...