【发布时间】:2018-08-06 05:00:40
【问题描述】:
我正在尝试使用 AutoMapper.QueryableExtensions 在 AutoMapper 中创建映射表达式来减轻一些痛苦
我有以下,这会带来关键的性能提升:
private MapperConfiguration CreateConfiguration() {
return new MapperConfiguration(cfg => cfg.CreateMap<Widget, WidgetNameDto>()
.ForMember(dto => dto.Name,
conf => conf.MapFrom(w => w.Name)));
}
要了解性能提升,请参见此处:https://github.com/AutoMapper/AutoMapper/blob/master/docs/Queryable-Extensions.md 关键是查询受数据库级别的字段限制。
这很好用。但我预计需要做很多这样的投影。我试图从上面的 ForMember 子句中的语法中消除一些痛苦。
例如,我试过这个:
public static IMappingExpression<TFrom, TTo> AddProjection<TFrom, TTo, TField>(this IMappingExpression<TFrom, TTo> expression,
Func<TFrom, TField> from,
Func<TTo, TField> to
)
=> expression.ForMember(t => to(t), conf => conf.MapFrom(f => from(f)));
问题是我所做的一切都会出错:
AutoMapper.AutoMapperConfigurationException : Custom configuration for members is only supported for top-level individual members on a type.
即使传入的 Funcs 是顶级个人成员,这个事实也会在传递中丢失,所以我遇到了错误。我还尝试将 Func
有什么方法可以简化 ForMember 子句的语法?理想情况下,我只会传入两个相关字段。
【问题讨论】:
标签: automapper entity-framework-core iqueryable