c# - Automapper通过函数反向映射
问题描述
在简化的源 Device.cs 中,我有:
using Assisticant.Collections;
(...)
private ObservableList<Result> _results = new ObservableList<Result>();
public IEnumerable<Result> Results
{
get { return _results; }
}
public void AddResult(Result result)
{
_results.Add(result);
}
目标 DeviceDto.cs 是:
public List<Result> Results { get; set; }
我应该如何配置 Automapper 以进行从源到目标的简单直接映射,同时通过.AddResult(result)
函数对每个元素进行反向映射?(由于使用了库的目的,我必须以这种方式添加元素)
我应该添加什么:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Device, DeviceDto>().ReverseMap();
});
_mapper = new Mapper(config);
解决方案
不要使用ReverseMap()
,而是显式地配置从DeviceDto
到的映射Device
。
因为Device.Results
只定义了一个 getter,所以在映射步骤中它会被 AutoMapper 忽略。AfterMap
如果您需要同时访问源和目标,请使用该方法。
using System.Linq;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Device, DeviceDto>();
cfg.CreateMap<DeviceDto, Device>()
.AfterMap((src, dst) => src.Results.Select(result => dst.AddResult(result)));
});
推荐阅读
- javascript - Firebase 数据库没有响应
- sql - 从具有多个条件的 1 个表中选择行
- javascript - 为数组中的项目扩展项目类型或类型
- c# - 如何使用 .NET SDK 访问 OneDrive 中超过 5,000 个项目的 OneNote 笔记本?
- node.js - Sequelize 模型 Include 返回一个数组,其中一个对象包含空值
- google-apps-script - 将值从范围复制到另一个电子表格末尾的脚本
- python - Installation of Python and MySQL connector
- php - How to measure the execution rate in Laravel?
- python - bulk_update_mappings 按不同于私钥的字段
- javascript - How do I get rid of an uncalled padStart Error