自动映射程序无法转换对象的类型

本文关键字:对象 类型 转换 映射程序 | 更新日期: 2023-09-27 18:28:23

我正在尝试使用automapper,但遇到了一个异常。以下是我的课程:

public class Image : BaseEntity, IEntity<Guid>
{
    [Key, ForeignKey("Photo")]
    public Guid Id { get; set; }
    public byte[] ImageData { get; set; }
    public string ImageMimeType { get; set; }
    public virtual Photo Photo { get; set; }
}
[MessageContract]
public class ImageDownloadResponse
{
    public ImageDownloadResponse(ImageMetaData metaData, Stream stream)
    {
        DownloadedImageMetadata = metaData;
        ImageByteStream = stream;
    }
    [MessageHeader(MustUnderstand = true)]
    public ImageMetaData DownloadedImageMetadata;
    [MessageBodyMember(Order = 1)]
    public Stream ImageByteStream;
}
[DataContract]
public class ImageMetaData
{
    public ImageMetaData(Guid imageId, string imageMimeType)
    {
        ImageId = imageId;
        ImageMimeType = imageMimeType;
    }
    [DataMember(Name = "ImageId", Order = 0, IsRequired = true)]
    public Guid ImageId;
    [DataMember(Name = "ImageMimeType", Order = 1, IsRequired = true)]
    public string ImageMimeType;
}

以及这些类的自动映射器配置:

Mapper.CreateMap<Image, ImageDownloadResponse>()
     .ForCtorParam("metaData", opt => opt.MapFrom(src => new ImageMetaData(src.Id, src.ImageMimeType)))
     .ForCtorParam("stream", opt => opt.MapFrom(src => new MemoryStream(src.ImageData)))
     .ForSourceMember(src => src.Id, opt => opt.Ignore())
     .ForSourceMember(src => src.Photo, opt => opt.Ignore());

异常详细信息是它无法从System.Guid转换为我的实体Image。

但我没有尝试转换这个字段。我放了忽略选项。怎么回事?

自动映射程序无法转换对象的类型

尝试使用ConstructUsing,如下所示:

AutoMapper.Mapper.CreateMap<Image, ImageDownloadResponse>()
  .ConstructUsing(src => new ImageDownloadResponse(new ImageMetaData(src.Id, src.ImageMimeType), new MemoryStream(src.ImageData)))