2011-05-31 176 views
1

我正在使用T4 template爲我的每個數據實體創建DTO,但它在使用IList時正在失敗。T4文本模板與IList

http://pastebin.com/QxtsDJdt

Func<PropertyInfo, bool> scalarProperties = p => !p.PropertyType.GetInterfaces().Any(t => t == typeof(System.Collections.IList) || t == typeof(System.Collections.ICollection)); 
Func<PropertyInfo, bool> collectionProperties = p => !scalarProperties.Invoke(p); 

private bool ExportProperty(PropertyInfo p) 
{ 
    return true; 
} 

我認爲這是倒下的部分是這樣的,即使IList的是一個ICollection的,下面沒有被評估,以true

if (ExportProperty(property) && collectionProperties(property)) 

我不知道如何調試.tt(T4)文件在2010年VS

當一個屬性是一個IList正在生成的類別是:

public System.Collections.Generic.IList`1[[Namespace.Inspection, Entities, Version=1.0.4168.906, Culture=neutral, PublicKeyToken=null]] Inspections 
{ 
    get; set; 
} 

當它應該是:

public System.Collections.Generic.IList<Namespace.Inspection> Inspections 
    { 
     get; set; 
    } 

回答

1

到PastBin的聯繫斷了,但我明白從問題;該問題類似於以下問題「How can I get the correct text definition of a generic type using reflection?」。但是,如果您使用實體框架,那麼您可以更好地使用從模型生成的POCO或自我跟蹤實體,而不是對DTO進行翻譯。

對於調試T4我只是開始在一個單獨的類中編寫我的邏輯,我將它移動到T4文件或從它調用。我還安裝了免費的T4 toolbox擴展,乍一看它很有幫助,但我剛開始學習/使用代碼生成。所以也許存在更好的解決方案或實踐