我正在使用T4生成一些类定义,并发现我的字段名称前面有一个下划线。
我已经设置了
code.CamelCaseFields = true;
只是为了安全(即使我理解这是默认设置)但仍然以_myField而不是myField结束。
如何生成不带“_”字符的字段名称?
此外,T4的文档在哪里?我找到了很多资源,比如
Code Generation and Text Templates和众多博客,但我没有找到逐类,逐个属性的文档。
答案 0 :(得分:3)
您可能正在谈论EF4自我追踪实体。 CodeGenerationTools
类包含在<#@ include file="EF.Utility.CS.ttinclude"#>
指令中,您可以在“[VSInstallDir] \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Includes \ EF.Utility.CS”中找到该指令。 ttinclude”。
FieldName函数定义如下:
private string FieldName(string name)
{
if (CamelCaseFields)
{
return "_" + CamelCase(name);
}
else
{
return "_" + name;
}
}
“_”在函数中是硬编码的。编码自己应该不难。请注意,CodeGenerationTools
类特定于此ttinclude文件,并不是在T4中生成代码的通用和嵌入方式。
答案 1 :(得分:2)
我编写了以下方法来使第一个字符大写,删除空格/下划线并使下一个字符大写。见下面的样品。随意使用。
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 :(得分:0)
这是一个很好的建议,但它不能帮助你知道哪里放置这样一个功能的正确位置......
是否有关于DECOMPOSING EF .tt文件或单步执行输出生成以查看它如何构建输出的指导?
通过将其插入到一个名为的函数中,我成功地使用了上述函数 (Ef4.3)
public string Property(EdmProperty edmProperty)
这似乎用于输出像“public int fieldname {get; set;}”
这样的行并将第3个(索引{2})参数更改为格式化以包装函数以修改名称,如下所示:
_typeMapper.GetTypeName(edmProperty.TypeUsage), //unchanged
UnderScoreToPascalCase(_code.Escape(edmProperty)), //wrapped "name"
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)), // unchanged
这并不完美,例如:它不会保留现有的“Ucasing”并且不关心这样的事情: customerIP 输出:Customerip 哪个IMO不太可读......
但它比我所看到的更好,这是一场噩梦,因为数据库混杂了camelCase,PascalCase和下划线分离,所以非常可怕。
无论如何希望这有助于某人...