Как сопоставить два объекта (источника) одному месту назначения с разными свойствами - PullRequest
1 голос
/ 18 октября 2019

Я использовал EF Core (2.2) и Automapper. У меня есть несколько объектов: две сущности (Partner, PartnerStatus) и модель интеграции (IntegrationPartnerModel). Мне нужно сопоставить два объекта (Partner, IntegrationPartnerModel) с одним (PartnerStatus) в разных свойствах.

Ниже приведено определение каждого из них:

public class Partner {
   public int PartnerId { get; set; }
   public string Name { get; set; }
   public string Comment { get; set; }

   // Relation Partner and PartnerStatus
   public int PartnerStatusId { get; set; }

   // Navigation property to PartnerStatus
   public PartnerStatus PartnerStatus { get; set; }

   // Relation IntegrationPartnerModel and PartnerStatus
   public string PartnerStatusCode { get; set; }
}

public class PartnerStatus {
   public int Id { get; set; }
   public string Name { get; set; }

   // Status code from integration service
   public string Code { get; set; }
}

public class IntegrationPartnerModel {
   public string Name { get; set; }

   // relation to PartnerStatus entity (Code property)
   public string PartnerStatusCode { get; set; }

   // Navigation property to PartnerStatus entity
   public PartnerStatus PartnerStatus { get; set; }

   // etc
}

Я сделал два Automapper'sпрофили:

public class PartnerStatusProfile : Profile {
   public PartnerStatusProfile()
   {
      CreateMap<PartnerStatus, Partner>()
         .ForMember(p => p.PartnerStatusId, o => o.MapFrom(s => s.Id))
         .ReverseMap();

      CreateMap<PartnerStatus, IntegrationModel>()
         .ForMember(p => p.PartnerStatusCode, o => o.MapFrom(s => s.Code))
         .ReverseMap();
   }
}

public class PartnerProfile : Profile
{
   public PartnerProfile() {

      CreateMap<IntegrationPartnerModel, Partner>()
         .IncludeMembers(integration => integration.PartnerStatus)
         .ForMember(p => p.PartnerStatusCode, o => o.MapFrom(p => p.PartnerStatusCode))
   }
}

Отображение Partner и PartnerStatus (PartnerStatusId - это связь) успешно выполнено. Но сопоставление IntegrationPartnerModel и Partner (PartnerStatusCode является отношением) не выполнено.

var integrationPartnerModel = new IntegrationPartnerModel {
    PartnerStatusCode = "ABC"
    //...
};

var newPartner = _mapper.Map<IntegrationPartnerModel, Partner>(integrationPartnerModel);

Свойство newPartner.PartnerStatusCode = "" (по умолчанию) и newPartner.PartnerStatus имеет значение null.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...