c# - 我可以在 AutoMapper 中集中我想忽略的映射吗?
问题描述
我的类具有通常CreatedDate
的 、CreatedById
、等字段EditedDate
,EditedById
当从域模型-> 实体模型(它们稍后由数据库填充)进行映射时,我会忽略这些字段。
我的映射现在到处都是映射忽略看起来有点像
CreateMap<UpdateProvider, ProviderInstance>()
.ForMember(e => e.Id, opt => opt.Ignore())
.ForMember(e => e.CreatedDate, opt => opt.Ignore())
.ForMember(e => e.CreatedById, opt => opt.Ignore())
.ForMember(e => e.EditedDate, opt => opt.Ignore())
.ForMember(e => e.EditedById, opt => opt.Ignore())
.ForMember(e => e.ArchivedDate, opt => opt.Ignore())
.ForMember(e => e.ArchivedById, opt => opt.Ignore());
我可以将其集中在一个方法中以遵守 DRY 原则吗?如果有帮助,这些字段中的每一个都有名为 IIdentifiable
, ICreateable
, IEditable
,的接口IArchiveable
。
我希望只创建一个类似的扩展方法.IgnoreDbGeneratedFields<TDestination>()
解决方案
遵循以下几行的扩展方法应该可以工作:
public static IMappingExpression<T1, T2> IgnoreDbGeneratedFields<T1, T2>(this IMappingExpression<T1, T2> e)
where T2 : IIdentifiable, ICreateable, IEditable, IArchiveable
{
return e
.ForMember(x => x.Id, opt => opt.Ignore())
.ForMember(x => x.CreatedDate, opt => opt.Ignore())
.ForMember(x => x.CreatedById, opt => opt.Ignore())
.ForMember(x => x.EditedDate, opt => opt.Ignore())
.ForMember(x => x.EditedById, opt => opt.Ignore())
.ForMember(x => x.ArchivedDate, opt => opt.Ignore())
.ForMember(x => x.ArchivedById, opt => opt.Ignore());
}
推荐阅读
- modelica - TRANSFORM 库是否与 OpenModelica 兼容
- apache-kafka - 如何在 Kafka 中并行处理多个 CSV 文件?
- mongodb - 根据某些列找出 MongoDB 中两个集合中存在的公共行
- python - 安装 WebP,conan 错误
- go - 如何使用 golang 查询检索 LDAP 条目的所有属性?
- tensorflow - 如何在TensorFlow中给定稀疏矩阵数据计算余弦相似度?
- tensorflow - 使用 TensorBoard 从 tf_agents 可视化图形
- json - JSON-RPC 与 JSON 补丁
- python - 在 pyspark RDD 上执行 map/reduce 时出现一些错误
- hybris - 斯巴达克斯目录同步