Генератор DTO для модели EF 4 Entity

Можно ли написать шаблон t4 (или если он уже существует), который сможет генерировать классы DTO на основе данных в файле * .edmx?

Мне нужно написать классы DTO для текущего проекта, и этот процесс довольно утомительный.

Я пытаюсь получить классы DTO, которые будут иметь скалярные свойства, определенные как простые автоматические свойства, и параметры навигации, как инкапсулированные. экземпляры других классов DTO.

Пример:

public class SomeClassDTO
{
    public byte Id { get; set; }

    public string Description { get; set; }        

    public OtherClassDTO SomeProperty {get;set;}

    public IList<AnotherClassDTO> Objects {get;set;}
}

Это хорошая отправная точка, более желательно может выглядеть следующий пример:

/// <summary>
/// Employee details DTO.
/// </summary>
public class EmployeeDetailsDTO
{
    [Key] 
    public long Id { get; set; }

    [Required] 
    public string FirstName { get; set; }

    [Required]
    public string Surname { get; set; }

    ...

    public long? PhotoId { get; set; }

    // Home address properties.


    public string HomeAddressAddressLine1 { get; set; } // This is just name of field, not flattened list 
    public string HomeAddressAddressLine2 { get; set; }
    public string HomeAddressAddressLine3 { get; set; }
    public string HomeAddressPostcode { get; set; }
    public short? HomeAddressCountryId { get; set; }
    public long? HomeAddressCountyId { get; set; }
    public long? HomeAddressTownId { get; set; }


    public short? HomeTelephoneCountryId { get; set; }        
    public string HomeTelephoneNumber{ get; set; }
    public string HomeTelephoneExtension { get; set; }


    public short? PersonalMobileCountryId { get; set; }      
    public string PersonalMobileNumber { get; set; }
    public string PersonalMobileExtension { get; set; }

}

Как вы можете видеть, это плоский DTO, который представляет составную структуру и может быть вводится обратно сущностям посредством инъекций ValueInjector SameNameFlat / UnFlat.

Это конечная цель, хотя любые советы приветствуются.

9
задан v00d00 6 July 2011 в 14:19
поделиться