与IList的T4文本模板

时间:2011-05-31 02:24:38

标签: c# visual-studio-2010 t4 dto

我正在使用T4 template为我的每个数据实体创建DTO,但是它正在使用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))

我不确定如何在VS 2010中调试.tt(T4)文件。

当属性是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 个答案:

答案 0 :(得分:1)

PastBin的链接已被破坏,但我从问题中理解了这一点;问题类似于以下问题“How can I get the correct text definition of a generic type using reflection?”。但是,如果您正在使用实体框架,那么您可以更好地使用从模型生成的POCO或自我跟踪实体,而不是对DTO进行翻译。

对于调试T4,我只是从一个单独的类中编写逻辑开始,我将其转移到T4文件或从中调用。我还安装了免费的T4 toolbox扩展程序,乍一看它很有用,但我刚开始学习/使用代码生成。所以可能存在更好的解决方案或实践。