Правильный способ преобразования имен столбцов и таблиц в SubSonic 3 - PullRequest
0 голосов
/ 17 декабря 2009

Я пытаюсь преобразовать таблицу с именем app_user, в которой есть столбец с именем created_dt, в AppUser.CreatedDt в SubSonic3 с использованием шаблона ActiveRecord. Из того, что я видел, можно изменять имена таблиц и столбцов по мере необходимости в методе CleanUp файла Settings.ttinclude

.

Поэтому я добавил этот метод в Settings.ttinclude

string UnderscoreToCamelCase(string input)  {

        if( !input.Contains("_"))
            return input;

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < input.Length; i++)
        {
            if (input[i] == '_')
            {
                while (i < input.Length && input[i] == '_')
                    i++;
                if (i < input.Length)
                    sb.Append(input[i].ToString().ToUpper());
            }
            else
            {
                if (sb.Length == 0)
                    sb.Append(input[i].ToString().ToUpper());
                else
                    sb.Append(input[i]);
            }
        }

        return sb.ToString();
    }

А потом этот вызов в CleanUp

result=UnderscoreToCamelCase(result);

Если я запускаю запрос, такой как:

var count = (from u in AppUser.All()
             where u.CreatedDt >= DateTime.Parse("1/1/2009 0:0:0")
             select u).Count();

Я получаю NotSupportedException, член 'CreatedDt' не поддерживается

, который происходит от метода в строке TSQlFormatter.sql 152

protected override Expression VisitMemberAccess(MemberExpression m)

Если я закомментирую вызов UnderscoreToCamelCase и использую имена, как они есть в базе данных, все будет хорошо.

Одна интересная вещь заключается в том, что когда все работает нормально, метод VisitMemberAccess никогда не вызывается.

Кто-нибудь еще мог преобразовать имена таблиц / столбцов с подчеркиванием в них в верблюжий регистр в SubSonic3?

1 Ответ

0 голосов
/ 07 августа 2010

Может быть ответ на этот вопрос в другом потоке в StackOverflow, но это влечет за собой изменение исходного кода для Subsonic.core. текст ссылки

...