首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >camelCase中的T4 FieldName不带下划线?

camelCase中的T4 FieldName不带下划线?
EN

Stack Overflow用户
提问于 2010-06-01 01:06:50
回答 3查看 3.9K关注 0票数 3

我正在使用T4生成一些类定义,并且发现在我的字段名前面有一个下划线。

我已经设置了

代码语言:javascript
运行
复制
code.CamelCaseFields = true;

为了安全起见(尽管我知道这是默认设置),但最终还是使用了_myField而不是myField。

如何生成没有'_‘字符的字段名?

另外,T4的文档在哪里?我找到了大量的资源,比如

Code Generation and Text Templates和许多博客,但我还没有找到逐类、逐属性的文档。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-01 01:22:21

您可能正在谈论EF4自我跟踪实体。可以在"VSInstallDir\Common7\IDE\Extensions\Microsoft\Entity框架Tools\Templates\Includes\EF.Utility.CS.ttinclude".中找到CodeGenerationTools类,它是通过<#@ include file="EF.Utility.CS.ttinclude"#>指令包含的

FieldName函数的定义如下:

代码语言:javascript
运行
复制
private string FieldName(string name)
{
  if (CamelCaseFields)
  {
    return "_" + CamelCase(name);
  }
  else
  {
    return "_" + name;
  }
}

"_“是硬编码在函数中的。编写你自己的代码应该不难。注意,ttinclude类是这个ttinclude文件特有的,并不是在T4中生成代码的通用嵌入式方法。

票数 3
EN

Stack Overflow用户

发布于 2011-03-03 18:26:51

我已经编写了以下方法来使第一个字符大写,删除空格/下划线,并使下一个字符大写。请参阅下面的示例。请随意使用。

代码语言:javascript
运行
复制
private string CodeName(string name)
{
    name = name.ToLowerInvariant();

    string result = name;
    bool upperCase = false;

    result = string.Empty;
    for (int i = 0; i < name.Length; i++)
    {
        if (name[i] == ' ' || name[i] == '_')
        {
            upperCase = true;
        }
        else
        {
            if (i == 0 || upperCase)
            {
                result += name[i].ToString().ToUpperInvariant();
                upperCase = false;
            }
            else
            {
                result += name[i];
            }
        }
    }

    return result;
}

输入/输出样本: first_name = FirstName,id = Id,状态消息= StatusMessage

票数 2
EN

Stack Overflow用户

发布于 2014-03-07 10:43:14

这是一个很好的建议,但是它不能帮助你知道在哪里放置这样一个函数的正确位置……

有没有关于分解EF .tt文件或逐步执行输出生成以了解它是如何构建输出的指导?

通过将上面的函数插入到一个名为(Ef4.3)的函数中,我能够成功地使用它。

公共字符串属性(EdmProperty edmProperty)

它似乎用于输出类似于"public int fieldname { get;set;}“这样的行。

并将第三个(index {2})参数更改为与修改名称的函数一起包装的格式,如下所示:

代码语言:javascript
运行
复制
_typeMapper.GetTypeName(edmProperty.TypeUsage), //unchanged
UnderScoreToPascalCase(_code.Escape(edmProperty)), //wrapped "name"
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)), // unchanged

这并不完美,例如:它没有保留现有的"Ucasing“,也不关心这样的事情: customerIP输出: Customerip,IMO可读性不是很好……

但这比我看到的要好得多,因为数据库中混杂着camelCase、PascalCase和下划线分隔,非常可怕。

不管怎样,希望这能帮助到某个人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2944974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档