如何映射:
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?
如果我必须在某些属性上使用自定义解析器怎么办?我知道这不受支持但是有解决方法吗?