Я пытаюсь преобразовать таблицу с именем 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 не поддерживается
который исходит из метода в строке 152 TSqlFormatter.sql
protected override Expression VisitMemberAccess(MemberExpression m)
Если я закомментирую вызов UnderscoreToCamelCase и использую имена, как они есть в базе данных, все будет работать нормально.
Интересно то, что, когда все работает нормально, метод VisitMemberAccess никогда не вызывается.
Кто-нибудь еще мог преобразовать имена таблиц / столбцов с подчеркиванием в них в верблюжий регистр в SubSonic3?