AutoMapper - сопоставление со свойствами интерфейса - PullRequest
0 голосов
/ 01 мая 2020

Я использую запрашиваемые расширения AutoMapper для сопоставления сущностей Entity Framework Core с DTO.

var appleTrees = context.AppleTrees
  .ProjectTo<AppleTreeDto>(mapper.ConfigurationProvider);

Некоторые DTO имеют такие свойства интерфейса, как это:

public IFruitTreeDto
{
  List<IFruitDto> Fruits { get; set; }
}

public class AppleDto : IFruitDto
{
  ...
}

public AppleTreeDto : IFruitTreeDto
{
  public List<IFruitDto> Fruits { get; set; }
}

Конфигурация отображения находится в профиле AutoMapper:

CreateMap<EF.AppleTree, AppleTreeDto>();
CreateMap<EF.Apple, AppleDto>();

В настоящее время я получаю исключение «Отсутствует карта от Apple до IFruitDto. Создать с помощью CreateMap. После того, как я добавил эту карту, я получил исключение, что IFruitDto не может быть создан (это имеет смысл, это интерфейс, а не класс).

Как мне сказать Automapper использовать AppleDto для коллекции Fruits, когда сопоставление с AppleTreeDto? Каков оптимальный способ сделать это? Я должен написать конвертер типа для каждого свойства интерфейса?

1 Ответ

0 голосов
/ 01 мая 2020

Спасибо, Люциан, за то, что указал мне правильное направление! Получив это, сделав это изменение:

CreateMap<EF.Apple, IAppleDto>().As<AppleDto>();

Моя объектная модель на самом деле немного сложнее, у меня фактически будет несколько реализаций IAppleDto в системе, поэтому я не знаю, будет ли это исправление подождите, но пока это работает.

...