包含IncludeBase的自动映射器映射对抽象泛型类失败

我正在尝试将引用数据实体映射到dto,它们都从其自己的命名空间中的通用基类继承,并使用“通用”配置文件添加映射。考虑以下代码:

namespace Dtos
{
    public abstract class ReferenceData<TId>
        where TId : Enum
    {
        public TId Id { get; set; }

        public string Description { get; set; }
    }

    public class ConcreteDto : ReferenceData<MyEnum> { }
}

namespace Entities
{
    public abstract class ReferenceData<TId>
        where TId : Enum
    {
        public TId Id { get; set; }

        public string Description { get; set; }
    }

    public class ConcreteEntity : ReferenceData<MyEnum> { }
}

namespace DtoMapping
{
    internal abstract class ReferenceDataDtoProfile<TDto,TEntity,TId> : Profile
    where TDto : Dtos.ReferenceData<TId>
    where TEntity : Entities.ReferenceData<TId>
    where TId : Enum
    {
        public ReferenceDataDtoProfile()
        {
        }

        protected IMappingExpression<TDto,TEntity> CreateDtoToEntityMap()
        {
            return this.CreateMap<TDto,TEntity>()
                        .IncludeBase<Dtos.ReferenceData<TId>,Entities.ReferenceData<TId>>();
        }

        protected IMappingExpression<TEntity,TDto> CreateEntityToDtoMap()
        {
            return this.CreateMap<TEntity,TDto>()
                        .IncludeBase<Entities.ReferenceData<TId>,Dtos.ReferenceData<TId>>();
        }

        protected void CreateMaps()
        {
            this.CreateDtoToEntityMap();
            this.CreateEntityToDtoMap();
        }
    }

    internal sealed class ProfileForConcreteEntity : ReferenceDataDtoProfile<Dtos.ConcreteDto,Entities.ConcreteEntity,MyEnum>
    {
        public PeriodProfile()
        {
            this.CreateMaps();
        }
    }   
}

当我运行应用程序并尝试到达有问题的端点时,我可以在调试器中看到ReferenceDataDtoProfile类的代码已执行,但随后我得到一个例外,该对象没有任何映射,特别是:

  

InvalidOperationException:缺少来自的地图   Dtos.ReferenceData'1 [MyEnum]到Entities.ReferenceData'1 [MyEnum]。   使用CreateMap(ReferenceData'1,ReferenceData'1)创建。

如您所见,我为两个ReferenceData抽象类都添加了“ IncludeBase”方法,所以我不明白为什么会收到此异常。

在我的Web API项目中,我包含了 AutoMapper.Extensions.microsoft.DependendyInjection 版本7.0.0

谢谢。

lys_521 回答:包含IncludeBase的自动映射器映射对抽象泛型类失败

看来IncludeBase仅指定派生对象的映射将继承基础对象的配置。但是,您仍然需要为基础对象和派生对象创建实际的映射:

protected IMappingExpression<TDto,TEntity> CreateDtoToEntityMap() 
{ 
    this.CreateMap<Dtos.ReferenceData<TId>,Entities.ReferenceData<TId>>();
    return this.CreateMap<TDto,TEntity>() 
        .IncludeBase<Dtos.ReferenceData<TId>,Entities.ReferenceData<TId>>(); 
} 

protected IMappingExpression<TEntity,TDto> CreateEntityToDtoMap() 
{
    this.CreateMap<Entities.ReferenceData<TId>,Dtos.ReferenceData<TId>>();
    return this.CreateMap<TEntity,TDto>() 
        .IncludeBase<Entities.ReferenceData<TId>,Dtos.ReferenceData<TId>>(); 
}

有关更多信息,请参见Mapping Inheritance

本文链接:https://www.f2er.com/3148658.html

大家都在问