[英]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.