我正在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的引用?如果没有,有人可以指出我正确的方向吗?提前致谢!
答案 0 :(得分:0)
在Core中使用Auto Mapper时,您可以利用以下软件包在服务集合中注册IMapper:
services.AddAutoMapper()
然后像这样使用它:
ENGINE_set_ECDH(ENGINE *e, ECDH_METHOD * ecdh)
这将嗅探程序集并加载您的概要文件(实现Profile类的任何类)并将其添加到类型注册中