powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / AutoMapper. Рекурсивный маппинг
2 сообщений из 2, страница 1 из 1
AutoMapper. Рекурсивный маппинг
    #38411921
maratoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не соображу как замаппить следующий граф объектов:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
interface IEntity { }
interface IDto { }

class Parent : IEntity
{
    public IList<Child> Childs { get; set; }
}
class Child : IEntity
{
    IEntity Parent { get; set; }
}
////////////////DTOs////////////////
class ChildDto : IDto
{
    IDto Parent { get; set; }
}
class ParentDto : IDto
{
    public IList<ChildDto> Childs { get; set; }
}

public void Test()
{
    Mapper.CreateMap<Child, ChildDto>();
    Mapper.CreateMap<ChildDto, Child>();
    Mapper.CreateMap<Parent, ParentDto>();
    Mapper.CreateMap<ParentDto, Parent>();

    var parent = new Parent();
    var child = new Child { Parent = parent };
    parent.Childs.Add(child);

    var parentDto = Mapper.Map<ParentDto>(parent);
}



Первая проблема он ругается, что не может преобразовать Parent -> IDto.
Пытался сделать слудующее, найти нужный маппинг и отмаппить вручную,
но тогда получается рекурсивный маппинг и падает по стековерфлоу:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
Mapper.CreateMap<Child, ChildDto>()
    .MapFrom(x => x.Parent, o => o.ResolveUsing(x =>
{
    var sourceType = x.Parent.GetType();
    var destType = (from maps in Mapper.GetAllTypeMaps()
                    where maps.SourceType == sourceType
                    select maps).FirstOrDefault().DestinationType;
    return Mapper.Map(x.Parent, destType);
}));



Подскажите, кто чем может.
...
Рейтинг: 0 / 0
AutoMapper. Рекурсивный маппинг
    #38413029
maratoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
    Mapper.CreateMap<Child, ChildDto>();
    Mapper.CreateMap<ChildDto, Child>();
    Mapper.CreateMap<Parent, ParentDto>();
    Mapper.CreateMap<ParentDto, Parent>();
    // Пока сделал так
    Mapper.CreateMap<Parent, IDto>().As<ParentDto>();
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / AutoMapper. Рекурсивный маппинг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]