我正在尝试将引用数据实体映射到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 。
谢谢。