c# - Automapper 忽略嵌套集合属性
问题描述
我有一个简单的对象:
public class Project : Entity
{
public uint ProjectId { get; set; }
public virtual ICollection<Cabin> Cabins { get; set; }
}
public class Cabin : Entity
{
public IPAddress IpAddress { get; set; }
public int Port { get; set; }
public DateTime LastConnection { get; set; }
public byte ConnectionStatus { get; set; }
public byte TechnicalStatus { get; set; }
public Project Project { get; set; }
public int ProjectId { get; set; }
}
因此,使用自动映射器从一个映射到另一个忽略一些忽略的映射看起来像:
var mapperConfig = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Project, Project>()
.ForMember(source => source.Id, opt => opt.Ignore())
.ForMember(source => source.ProjectId, opt => opt.Ignore())
.ForMember(source => source.Cabins, opt => opt.MapFrom(cab => cab.cabins));
});
它的工作原理是将一个项目对象映射到另一个,并忽略 id 和项目 id 以及地图集合。
但是在那个级别上,是否可以设置 source.Cabins 中的哪些属性会被忽略?
例如,我想忽略 ConnectionStatus、TechnicalStatus。
解决方案
您可以为实体添加配置映射Cabin
,AutoMapper 会在映射 Cabin 实体之前查看这些配置。
cfg.CreateMap<Cabin, Cabin>()
.ForMember(source => source.ConnectionStatus, opt => opt.Ignore())
.ForMember(source => source.TechnicalStatus, opt => opt.Ignore());
或者您可以使用 AfterMap 事件为这些属性定义默认值。
推荐阅读
- javascript - javascript 正则表达式匹配任何脚本中所有非单词字符的正确正则表达式范围是多少?
- react-native - 当用户滚动到 viewpager (@react-native-community/viewpager) 中的另一个页面时,如何暂停正在播放的视频(使用 react-native-video 播放)?
- javascript - 从一个屏幕导航到另一个屏幕时未处理的承诺拒绝
- r - R如何在数据集上执行for循环
- json - 在sol中将参数转换为json
- json - 提取某些json对象nifi Json
- javascript - 如何仅在 Bootstrap Vue 表的单个单元格中显示验证失败消息?
- javascript - 如何在 VueJS 的父子通信中传递 JSON 数组?
- scala - Scala 中集合的交集
- android - Android Studio 更改工具栏阴影颜色