数据库优先模式下,由于数据库命名和C#命名规范不同,所以感觉很别扭。
首先,创建一个文件,命名随意,我使用了 EF.CS.Extend.ttinclude 其中方法主要是处理_
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#+
public class CodeGenerationHelper
{
public String FilterUnderline(String code)
{
if (String.IsNullOrWhiteSpace(code)) return String.Empty;
StringBuilder sb = new StringBuilder();
String[] values = code.Split(new char[] { '_' });
foreach (string value in values)
{
if(String.IsNullOrWhiteSpace(value)) continue;
sb.Append(value.Substring(0, 1).ToUpper());
if(value.Length > 1)
sb.Append(value.Substring(1, value.Length - 1).ToLower());
}
return sb.ToString();
}
}
#>
然后在生成数据库实体的头部加入 <#@ include file="EF.CS.Extend.ttinclude"#>
在T4中的各个生成代码的位置加入过滤方法,这个比较烦,VS2010和VS2012所使用的生成模板不一样,所以具体需要看情况。
最后看看生成的代码,哈哈
[Table("Take_Office")]
public partial class TakeOffice
{
[Column("id")]
public long Id { get; set; }
[Column("pers_code")]
public string PersCode { get; set; }
[Column("if_public_code")]
public Nullable<short> IfPublicCode { get; set; }
[Column("if_public_name")]
public string IfPublicName { get; set; }
[Column("public_form_code")]
public Nullable<short> PublicFormCode { get; set; }
[Column("public_form_name")]
public string PublicFormName { get; set; }
}