EF 5.0 修改T4模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF 5.0 修改T4模板相关的知识,希望对你有一定的参考价值。

    Ps 修改EF5.0的tt文件(添加命名空间和特性and备注),之所以修改是因为,使用Json.net序列化但是又不能序列化导航属性,因为这样会使程序运行时引发一个循环引用的BUG,所以需要在tt文件中遍历的时候添加命名空间和给导航属性添加特性

 EF 5.0 tt文件修改

  1添加类备注(添加命名空间) :          

WriteHeader(codeStringGenerator, fileManager);
string summary=string.Empty;
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
if(entity.Documentation !=null && entity.Documentation.Summary!=null)
       summary=entity.Documentation.Summary;
     else
        summary=entity.Name;
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
using Newtonsoft.Json;
/// <summary>
/// <#=summary#>
/// </summary>

     ps: 请注意  entity这个单词 这个表示这个类的实体 entity.Name的名字就是.cs文件的名字 ,在备注的上面(灰色的地方)是引用的命名空间

 

   2 类中属性的备注

 var simpleProperties = typeMapper.GetSimpleProperties(entity);
    if (simpleProperties.Any())
    {
        foreach (var edmProperty in simpleProperties)
        {
if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
          {
           summary=edmProperty.Documentation.Summary;
          }
         else
          {
           summary=edmProperty.Name;
          }
#>    
    // <#=summary#>    
    <#=codeStringGenerator.Property(edmProperty)#>

 

    ps: 同样这段代码表示的是遍历这个实体的属性 可以看到edmPropetry这个单词 当然 edmPropetry.Name表示这个属性的名字

    3 导航属性添加特性

var navigationProperties = typeMapper.GetNavigationProperties(entity);
    if (navigationProperties.Any())
    {
#>

<#
        foreach (var navigationProperty in navigationProperties)
        {
#>
    [JsonIgnore]
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
        }
    }
#>
}
<#
    EndNamespace(code);
}

   ps: 红色位置添加特性 ,   navigationProperty顾名思义导航属性

以上是关于EF 5.0 修改T4模板的主要内容,如果未能解决你的问题,请参考以下文章

使用T4模板为EF框架添加数据库实体注释(转)

EF CodeFirst 使用T4模板

T4模板:T4模板之菜鸟篇

使用T4模板为EF框架添加数据库实体注释

T4模板学习心得

无需任何配置即可生成实体代码的 T4 模板