我正在尝试使用ActiveRecord模板将名为app_user
的表(其中包含名为created_dt
的列转换为SubSonic3中的AppUser.CreatedDt)。从我所看到的,应该能够在Settings.ttinclude的CleanUp方法中根据需要修改表名和列名
所以我将此方法添加到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的调用并使用数据库中的名称,一切正常。
有趣的是,当一切正常时,OKMemberAccess方法永远不会被调用。
是否还有其他人能够将带有下层的表/列名称转换为SubSonic3中的驼峰案例?