我有一个非常奇怪的错误,我无法得到我的头。我使用的是带有AutoMapper.Collection
和AutoMapper.Collection.EntityFramework
的AutoMapper 6。具有实体框架的C#AutoMapper - 适用于列表,但不适用于单个可为空的实例
https://github.com/AutoMapper/AutoMapper.Collection
正如你可以从下面的截图中看到,每一个部件是从形象,是空的updatedContact
除了更新。如果我做了明确的映射只有updatedImage
它的作品。它也可以更新一系列图像而不会出现问题。有没有人经历过这个?其他单一属性也适用,但由于某种原因,Image
正在引发麻烦。
//Works
var updatedArticle = Mapper.Map<ArticleViewModel, Article>(articleVm, articleOriginal);
//Every component is updated a part from Image.
var updatedContact = Mapper.Map<ContactViewModel, Contact>(contactVm, contactOriginal);
//Works
var updatedImage = Mapper.Map<ImageViewModel, Image>(contactVm.Image);
//Works
var newContact = Mapper.Map<ContactViewModel, Contact>(contactVm);
映射:
cfg.CreateMap<ArticleViewModel, Article>(MemberList.Source)
.EqualityComparison((src, dst) => src.Id == dst.Id);
cfg.CreateMap<ImageViewModel, Image>(MemberList.Source)
.EqualityComparison((src, dst) => src.Id == dst.Id)
.ForSourceMember(x => x.IsDeleted, opt => opt.Ignore())
.ForMember(dest => dest.ImageBytes, opt => opt.MapFrom(src => Encoding.ASCII.GetBytes(src.Image)));
cfg.CreateMap<ContactViewModel, Contact>(MemberList.Source)
.EqualityComparison((src, dst) => src.Id == dst.Id)
.ForSourceMember(x => x.IsDeleted, opt => opt.Ignore())
.ForSourceMember(x => x.FullName, opt => opt.Ignore());
文件:
public class ArticleViewModel
{
public int Id { get; set; }
...
public List<ImageViewModel> Images { get; set; }
}
public class Article : IEntity<int>
{
public int Id { get; set; }
...
public virtual ICollection<Image> Images { get; set; }
}
public class ContactViewModel
{
public int Id { get; set; }
...
public ImageViewModel Image { get; set; }
}
public class Contact: IEntity<int>
{
[Key]
public int Id { get; set; }
...
public int? ImageId { get; set; }
public Image Image { get; set; }
}
public class ImageViewModel
{
public int Id { get; set; }
public string Image { get; set; }
public string ImageType { get; set; }
public bool IsDeleted { get; set; }
}
public class Image : IEntity<int>
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public byte[] ImageBytes { get; set; }
public string ImageType { get; set; }
public int? ArticleId { get; set; }
public virtual Article Article { get; set; }
}
*“其他单一性质的作品,以及,但由于某种原因,图像在作祟。” * - 可是你在你的代码片断说该映射'Image'工作和'Contact'不起作用。你能否提供一个实际显示问题的[mcve]? – poke
@poke在截图中可以看到,构造得不是很好,它应该是'每个组件都更新了Image中的一部分'。 – Ogglas
嗯,我还没有看到任何证明*任何*嵌套复杂属性得到实际映射。 'updatedImage'中的'Article'也是null。 – poke