簡體   English   中英

如何使用Automapper和DI映射導航屬性集合

[英]How to map navigation property collection with Automapper and DI

我在MVC Core中使用Automapper在我的實體和DTO之間進行映射,並通過以下代碼注入它。

 var mappingConfig = new MapperConfiguration(mc =>
        {
            mc.CreateMissingTypeMaps = true;
            mc.AddProfile(new MappingProfile());
        });

        IMapper mapper = mappingConfig.CreateMapper();
        services.AddSingleton(mapper);

我有這樣的關系。

public class ProgramDTO
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public List<AnalystDTO> Analysts { get; set; }
}

public class AnalystDTO
{
    public Guid ID { get; set; }
    public string Email { get; set; }
}

public class ProgramEntity
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ICollection<AnalystEntity> AnalystEntitys { get; set; }
}

public class AnalystEntity
{
    public Guid ID { get; set; }
    public string Email { get; set; }
    public int ProgramEntityId { get; set; }
    public ProgramEntity ProgramEntity { get; set; }
}

我正在嘗試在ProgramDTO和ProgramEntity之間映射以填充分析人員列表,但似乎找不到具體的示例。 我的地圖資料目前看起來像這樣。

  // Program Analyst
  CreateMap<AnalystDTO, AnalystEntity>();

  CreateMap<AnalystEntity, AnalystDTO>();

  // Program
  CreateMap<ProgramDTO, ProgramEntity>();            

  CreateMap<ProgramEntity, ProgramDTO>()
            .ForMember(dest => dest.Analysts, opt => opt.MapFrom(s => Mapper.Map<IEnumerable<AnalystEntity>, IEnumerable<AnalystDTO>>(s.AnalystEntitys)));

這種映射在邏輯上似乎是正確的,但是,在運行代碼時,我收到錯誤“未初始化映射器”,我認為這是因為我正在使用DI。

這是將導航屬性映射到其自己的DTO的正確方法嗎?如果是這樣,如何在映射配置文件中獲得對Mapper的引用? 如果沒有,有人可以指出我正確的方向嗎? 提前致謝!

在Core中使用Auto Mapper時,您可以利用以下軟件包向服務集合注冊IMapper:

AutoMapper.Extensions.Microsoft.DependencyInjection

然后像這樣使用它:

services.AddAutoMapper()

這將嗅探程序集並加載您的概要文件(任何實現Profile類的類)並將其添加到類型注冊中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM