中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架構~為EF DbContext生成(cheng)的實體添加注(zhu)釋(shi)(T4模板應用)

回到目錄

相關文章系列

第八回  EF架構~將數據庫(ku)注釋添加(jia)導入到模型(xing)實體(ti)類中

第二十一回  EF架(jia)構(gou)~為EF DbContext生成的實體添加注釋(shi)(T4模板應用)

第二(er)(er)十二(er)(er)回  EF架構~為EF DbContext生(sheng)成的(de)實體添(tian)加注釋(shi)(T5模板(ban)應用(yong)

使(shi)用EF架構時(shi),你的(de)實體(ti)(ti)生(sheng)成方案(an)有(you)多(duo)種,entity object,poco,dbcontext等(deng)等(deng),對于entity object方案(an)生(sheng)成的(de)實體(ti)(ti),我們感(gan)覺很(hen)臃腫,當然它的(de)功能(neng)很(hen)強在,但有(you)時(shi)在查(cha)看類(lei)實體(ti)(ti)時(shi),有(you)些麻煩,因為所有(you)實體(ti)(ti)都在一個類(lei)文(wen)(wen)件中,有(you)點像linq to sql,而它的(de)類(lei)格局也與dbml有(you)些雷同,當然這不(bu)是(shi)今天(tian)的(de)重點,今天(tian)主要說的(de)是(shi)當EDMX文(wen)(wen)件添加注(zhu)釋后,如何把注(zhu)釋同時(shi)添加到dbcontext實體(ti)(ti)上。

方案:修改dbcontext的T4模版

實現:找到(dao)以下代碼塊

先為類加注釋

string summary=string.Empty;
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(namespaceName, code);
    if(entity.Documentation !=null && entity.Documentation.Summary!=null)
       summary=entity.Documentation.Summary;
     else
        summary=entity.Name;
 #>
/// <summary>
/// <#=summary#>
/// </summary>

 

再為類中的(de)屬性加注釋

void WriteProperty(CodeGenerationTools code, EdmProperty edmProperty)
{}

將原來的代碼刪除,替(ti)換(huan)成如下代碼

void WriteProperty(CodeGenerationTools code, EdmProperty edmProperty)
{
    if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
    { 
        WriteProperty(Accessibility.ForProperty(edmProperty),
                      code.Escape(edmProperty.Documentation.Summary),
                      code.Escape(edmProperty.TypeUsage),
                      code.Escape(edmProperty),
                      code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
                      code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
    }
    else
    {
        WriteProperty(Accessibility.ForProperty(edmProperty),
                      code.Escape(edmProperty.Name),
                      code.Escape(edmProperty.TypeUsage),
                      code.Escape(edmProperty),
                      code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
                      code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
    }
}

void WriteNavigationProperty(CodeGenerationTools code, NavigationProperty navigationProperty)
{
    var endType = code.Escape(navigationProperty.ToEndMember.GetEntityType());
 if (navigationProperty.Documentation != null && navigationProperty.Documentation.Summary != null)
    { 
    WriteProperty(PropertyVirtualModifier(Accessibility.ForProperty(navigationProperty)),
                  code.Escape(navigationProperty.Documentation.Summary),
                  navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
                  code.Escape(navigationProperty),
                  code.SpaceAfter(Accessibility.ForGetter(navigationProperty)),
                  code.SpaceAfter(Accessibility.ForSetter(navigationProperty)));
    }
    else
    {
      WriteProperty(PropertyVirtualModifier(Accessibility.ForProperty(navigationProperty)),
                  code.Escape(navigationProperty.Name),
                  navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
                  code.Escape(navigationProperty),
                  code.SpaceAfter(Accessibility.ForGetter(navigationProperty)),
                  code.SpaceAfter(Accessibility.ForSetter(navigationProperty)));
    }
}

void WriteProperty(string accessibility, string summary, string type, string name, string getterAccessibility, string setterAccessibility)
{
#>
    /// <summary>
    /// <#=summary#>
    /// </summary>
    <#=accessibility#> <#=type#> <#=name#> { <#=getterAccessibility#>get; <#=setterAccessibility#>set; }
<#+
}

 

保存(cun)后(hou),它(ta)會將結果(guo)輸出到與TT文件(jian)同(tong)時的cs文件(jian)中,如果(guo)模板出現錯誤,也(ye)會將錯誤信(xin)息(xi)輸出到CS文件(jian)中,如果(guo)成功(gong),就會有如何內容:

 1 //------------------------------------------------------------------------------
 2 // <auto-generated>
 3 //    This code was generated from a template.
 4 //
 5 //    Manual changes to this file may cause unexpected behavior in your application.
 6 //    Manual changes to this file will be overwritten if the code is regenerated.
 7 // </auto-generated>
 8 //------------------------------------------------------------------------------
 9 
10 using System;
11 using System.Collections.Generic;

而且,你的模(mo)型(xing)注釋信息會被同時添加到實體(ti)上,呵(he)呵(he)。

 回到目錄

posted @ 2012-10-31 10:24  張占嶺  閱讀(10561)  評論(4)    收藏  舉報