Текстовый шаблон T4 с IList - PullRequest
1 голос
/ 31 мая 2011

Я использую шаблон T4 для создания 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))

Я не уверен, как отлаживать .tt (T4) файлы в VS 2010.

Класс, генерируемый, когда свойство является 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 Ответ

1 голос
/ 17 августа 2012

Ссылка на PastBin не работает, но что я понял из вопроса;проблема похожа на следующий вопрос " Как я могу получить правильное определение текста универсального типа, используя отражение? ".Но если вы используете Entity Framework, то, возможно, вам лучше использовать POCO или объекты самоконтроля, сгенерированные из модели, вместо того, чтобы переводить их в DTO.

Для отладки T4 я просто начну с кодирования своей логики вотдельный класс, который я перемещаю в файл T4 или вызываю из него.Я также установил бесплатное расширение T4 toolbox , и на первый взгляд это полезно, но я только начал изучать / использовать генерацию кода.Так что, возможно, существуют лучшие решения или практики.

...