首页 > 解决方案 > 我可以在 AutoMapper 中集中我想忽略的映射吗?

问题描述

我的类具有通常CreatedDate的 、CreatedById、等字段EditedDateEditedById当从域模型-> 实体模型(它们稍后由数据库填充)进行映射时,我会忽略这些字段。

我的映射现在到处都是映射忽略看起来有点像

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>()

标签: c#automapper

解决方案


遵循以下几行的扩展方法应该可以工作:

    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());
}

推荐阅读