Используя AutoMapper для невыравнивания DTO

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

Рассмотрите этот пример объектов области (один объект и одно значение):

public class Person
{
    public string Name { get; set; }
    public StreetAddress Address { get; set; }
}

public class StreetAddress
{
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}

Мой DTO (от объекта Linq-SQL) выходит, походя примерно на это:

public class PersonDTO
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}

Я хотел бы смочь сделать это в своем репозитории:

return Mapper.Map<PersonDTO, Person>(result);

Я попытался настроить AutoMapper таким образом, я могу фигурировать, но я продолжаю заставлять универсальную Недостающую конфигурацию карты типа или неподдерживаемую отображающуюся ошибку без деталей говорить мне, где я перестал работать.

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

Mapper.CreateMap<PersonDTO, Person>()
    .ForMember(dest => dest.Address, opt => opt.MapFrom(Mapper.Map<Person, Domain.StreetAddress>));

и

Mapper.CreateMap<Person, Domain.Person>()
    .ForMember(dest => dest.Address.Address1, opt => opt.MapFrom(src => src.Address))
    .ForMember(dest => dest.Address.City, opt => opt.MapFrom(src => src.City))
    .ForMember(dest => dest.Address.State, opt => opt.MapFrom(src => src.State));

Я считал, что выравнивание объектов с AutoMapper легко, но невыравнивание их не легко... или даже возможно. Кто-либо может сказать мне, пытаюсь ли я сделать невозможное, и если не, что я делаю неправильно?

Обратите внимание, что мои фактические объекты немного более сложны, таким образом, возможно, что я не учитываю информацию, которая является ключом к ошибке... если, что я делаю правильно взгляды, которые я могу обеспечить большему количеству информации или начать упрощать свои объекты для тестирования.

39
задан Daniel Schilling 9 November 2011 в 23:37
поделиться

1 ответ

используйте https://github.com/omuleanu/ValueInjecter , он выполняет выравнивание и выравнивание и все остальное вам нужно, есть пример приложения asp.net mvc в загрузке , где демонстрируются все функции (также модульные тесты)

8
ответ дан 27 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: