我有一个ASP.Net Core C#
应用程序并使用AutoMapper
DTO
public class MovieTO
{
public int Id { get; set;}
public IEnumerable<TicketTO> Tickets { get; set;}
}
public class TicketTO
{
public string Prop1{ get; set;}
public string Prop2{ get; set;}
public string Prop3{ get; set;}
public string Prop4{ get; set;}
}
域实体
public class Movie
{
public int Id { get; set;}
public IEnumerable<BasicTicket> Tickets { get; set;}
}
public class BasicTicket
{
}
public class RegularTicket : BasicTicket
{
public string Prop1{ get; set;}
public string Prop2{ get; set;}
}
public class SpecialTicket : BasicTicket
{
public string Prop3{ get; set;}
public string Prop4{ get; set;}
}
AutoMapper配置
public class AppObjectsMapper
{
private readonly IMapper _mapper;
public ObjectsMapper()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<TicketTO, RegularTicket>();
cfg.CreateMap<TicketTO, SpecialTicket>();
cfg.CreateMap<MovieTO, Movie()
});
_mapper = config.CreateMapper();
}
public Movie MapToEntity(MovieTO movie)
{
if(movie.IsSpecial)
{
//#Line1
_mapper.Map<IEnumerable<TicketTO>, IEnumerable<SpecialTicket>>(movie.Tickets);
}
else
{
//#Line2
_mapper.Map<IEnumerable<TicketTO>, IEnumerable<RegularTicket>>(movie.Tickets);
}
return _mapper.Map<MovieTO, Movie>(eventDetail);
}
}
当在#line1或#line2处调用映射器时,它将引发以下运行时错误。
错误映射类型。映射类型:IEnumerable
1 -> IEnumerable
1System.Collections.Generic.IEnumerable1[[TicketTO, app.DTO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable
1 [[Domain.SpecialTicket,myapp.domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]
如何打字/映射?
谢谢!
实际上,您实际上缺少了一些例外明确说明的配置。因此,只需阅读异常并添加缺少的映射即可,例如:
cfg.CreateMap<TicketTO, BasicTicket>();
应该可以。最好的祝福罗伯特