我正在使用T4 template为我的每个数据实体创建DTO,但是它正在使用IList。
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;
}
答案 0 :(得分:1)
PastBin的链接已被破坏,但我从问题中理解了这一点;问题类似于以下问题“How can I get the correct text definition of a generic type using reflection?”。但是,如果您正在使用实体框架,那么您可以更好地使用从模型生成的POCO或自我跟踪实体,而不是对DTO进行翻译。
对于调试T4,我只是从一个单独的类中编写逻辑开始,我将其转移到T4文件或从中调用。我还安装了免费的T4 toolbox扩展程序,乍一看它很有用,但我刚开始学习/使用代码生成。所以可能存在更好的解决方案或实践。