首页 > 解决方案 > 如何将两个对象(源)映射到不同属性的一个目标

问题描述

我一直在使用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 的个人资料:

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))
   }
}

映射合作伙伴和PartnerStatus(PartnerStatusId是关系)是成功的。
但是 IntegrationPartnerModel 和合作伙伴的映射(PartnerStatusCode 是关系)失败。

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

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



属性 newPartner.PartnerStatusCode = ""(默认)并且 newPartner.PartnerStatus 为空。

我究竟做错了什么?

标签: c#.netautomapper

解决方案


推荐阅读