Как сопоставить DTO с отношением «многие ко многим» к основному объекту EF с таблицей отношений, используя automapper? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть две сущности в моей БД. A и B. У меня также есть таблица отношений, представляющая отношение многих ко многим между этими объектами AB:

public class A
{
    public ICollection<AB> ABs { get; set; }
}

public class B
{
    public ICollection<AB> ABs { get; set; }
}

public class AB
{
    public A A { get; set; }
    public B B { get; set; }
}

Теперь я хочу скрыть эту таблицу отношений в моем dto следующим образом:

public class ADTO
{
    public ICollection<B> Bs { get; set; }
}

Я хочу одну коллекцию B с моими экземплярами, представленными напрямую, а не в виде таблицы отношений. Я хочу иметь профиль автоматического преобразователя, который отображается из списка объектов B в список ранее не существующих объектов AB с атрибутом B, а также сам экземпляр A.

Я уже реализовал преобразователь от A к ADTO, например, так:

public class AProfile : Profile
{
    public AProfile()
    {
        CreateMap<A, ADTO>()
            .ForMember(dest => dest.B, opt => opt.MapFrom(src => src.AB.Select(y => y.B).ToList()));
        CreateMap<ADTO, A>();
    }
}

Мне не хватает обратного направления: от ADTO с его списком сущностей к A со ссылкой на сущность таблицы отношений.

1 Ответ

1 голос
/ 18 февраля 2020

Создайте свой профиль, как показано ниже:

  CreateMap<ADTO, A>()
            .ForMember(dest => dest.AName, opt => opt.MapFrom(src => src.AName))
            .ForMember(dest => dest.ABs, opt => opt.MapFrom(src => src.Bs))
            .AfterMap((src, dest) =>{
                foreach(var b in dest.ABs)
                {
                    b.AId = src.Id;
                }
            });
  CreateMap<B, AB>()
            .ForMember(dest=>dest.BId,opt=>opt.MapFrom(src=>src.Id))
            .ForMember(dest=>dest.B,opt=>opt.MapFrom(src=>src));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...