我如何映射这个:
public class Domain_1
{
public DomainType DomainType { get; set; }
public Domain_2 Domain2 { get; set; }
public Domain_3 Domain3 { get; set; }
}
至:
public abstract class DTOBase
{
// properties from Domain_1
}
public class DTO_1 : DTOBase
{
// properties from Domain_2
}
public class DTO_2 : DTOBase
{
// properties from Domain_3
}
理想情况下,域设计应该与 DTO 相同,但由于 EF6 和现有数据库限制,我不能。
目前我现在拥有的是:
this.CreateMap<Domain_1, DTOBase>()
.ConstructUsing(SomeDTOCreatorFactoryMethod);
this.CreateMap<Domain_2, DTO_1>();
SomeDTOCreatorFactoryMethod 所做的是基于 DomainType 创建 DTO。
这很好,但我想做一些投影,比如:
var domain_Db = dbContext.Domain1.Where(d => d.Id == 1).ProjectTo<DTOBase>.SingleOrDefault();
// var result = _mapper.Map<Domain1, DTOBase>(domain_Db);
它抛出一个无法实例化抽象类的错误。我理解错误,但我如何使用工厂方法来创建 DTO?
如果我必须在某些属性上使用自定义解析器怎么办?我知道这不受支持,但有解决方法吗?