c# - 我可以在 AutoMapper 中集中我想忽略的映射吗?

标签 c# automapper

我的类(class)有通常的 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 的接口(interface), 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());
}

关于c# - 我可以在 AutoMapper 中集中我想忽略的映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64571913/

相关文章:

c# - 抽象属性或基本构造函数参数?

c# - Automapper:在配置文件上设置 AllowNullCollections

c# - AutoMapper 从静态 API 迁移

c# - 角色、抽象模式、松耦合

c# - WPF/.NET 数据访问模型 - 资源推荐

c# - 以 Datatable 作为 ItemSsource 的 WPF Datagrid 分组

c# - Automapper 将一个属性映射到多个

c# - Autofac + Automapper + 自定义 ValueResolver

c# - 在 ITypeConverter 中使用 Automapper

c# - 是否可以从第 3 方应用程序执行对 Azure App Insight 的查询