我在尝试使用ValueInjector正确映射对象时遇到了麻烦。这是我用于映射的代码:
public IEnumerable<CategoryDTO> FindCategories(IList<object[]> criteria)
{
IEnumerable<Category> categories = _categoryRepo.Find(criteria);
IEnumerable<CategoryDTO> categoriesDto = Mapper.Map<IEnumerable<Category>, IEnumerable<CategoryDTO>>(categories);
return categoriesDto;
}
变量类别包含属性:
IEnumerable<Standard> Standards
此属性在我正在调用的实例中包含两个Standard对象。问题是当我从我的类别映射到我的CategoryDTO时。 CategoryDTO定义如下:
public class CategoryDTO : AuditableDTO
{
public Guid CategoryId { get; set; }
public string Name { get; set; }
public string MachineName { get; set; }
public string Description { get; set; }
public IEnumerable<StandardDTO> Standards { get; set; }
}
运行映射语句后,我调查了categoriesDto.Standards的内容,我可以看到它是null。我本来希望我的标准已经映射,但我确定我错过了ValueInjector的东西。可能就是告诉它如何将Standard映射到StandardDTO。有什么想法吗?
编辑:我需要澄清一下,我正在使用这个http://valueinjecter.codeplex.com/wikipage?title=Automapper%20Simulation&referringTitle=Home
编辑2:深入挖掘,我可以看到我的Iesi.Collections.HashedSet导致问题。 Categorys的Standards属性被输入为Iesi.Collections.ISet,它被转换为HashedSet。所以我想我真正的问题是如何检查该类型的属性以及如何映射?
答案 0 :(得分:2)
我的猜测是Mapper.Map不知道比IEnumerable更深地映射一个级别。您是否尝试过循环集合,将其映射到Category,CategoryDTO级别和IEnumerable级别?