自动映射程序无法转换对象的类型
本文关键字:对象 类型 转换 映射程序 | 更新日期: 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)))