我正在使用T4生成一些类定义,并且发现在我的字段名前面有一个下划线。
我已经设置了
code.CamelCaseFields = true;为了安全起见(尽管我知道这是默认设置),但最终还是使用了_myField而不是myField。
如何生成没有'_‘字符的字段名?
另外,T4的文档在哪里?我找到了大量的资源,比如
Code Generation and Text Templates和许多博客,但我还没有找到逐类、逐属性的文档。
发布于 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函数的定义如下:
private string FieldName(string name)
{
if (CamelCaseFields)
{
return "_" + CamelCase(name);
}
else
{
return "_" + name;
}
}"_“是硬编码在函数中的。编写你自己的代码应该不难。注意,ttinclude类是这个ttinclude文件特有的,并不是在T4中生成代码的通用嵌入式方法。
发布于 2011-03-03 18:26:51
我已经编写了以下方法来使第一个字符大写,删除空格/下划线,并使下一个字符大写。请参阅下面的示例。请随意使用。
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
发布于 2014-03-07 10:43:14
这是一个很好的建议,但是它不能帮助你知道在哪里放置这样一个函数的正确位置……
有没有关于分解EF .tt文件或逐步执行输出生成以了解它是如何构建输出的指导?
通过将上面的函数插入到一个名为(Ef4.3)的函数中,我能够成功地使用它。
公共字符串属性(EdmProperty edmProperty)
它似乎用于输出类似于"public int fieldname { get;set;}“这样的行。
并将第三个(index {2})参数更改为与修改名称的函数一起包装的格式,如下所示:
_typeMapper.GetTypeName(edmProperty.TypeUsage), //unchanged
UnderScoreToPascalCase(_code.Escape(edmProperty)), //wrapped "name"
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)), // unchanged这并不完美,例如:它没有保留现有的"Ucasing“,也不关心这样的事情: customerIP输出: Customerip,IMO可读性不是很好……
但这比我看到的要好得多,因为数据库中混杂着camelCase、PascalCase和下划线分隔,非常可怕。
不管怎样,希望这能帮助到某个人。
https://stackoverflow.com/questions/2944974
复制相似问题