2012-08-08 98 views
2

我在尝试让ValueInjector正确映射对象时遇到了问题。这是我使用的映射代码: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 

此属性包含在我打电话的情况下两个标准的对象。问题是,当我从我的类别映射到我的类别DTO。 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的内容,我可以看到,它是空的。我会希望我的标准已经映射,但我确定我错过了ValueInjector的一些东西。可能是沿着告诉它如何将Standard映射到StandardDTO的方式。有什么想法吗?

编辑:我要澄清,我使用这个http://valueinjecter.codeplex.com/wikipage?title=Automapper%20Simulation&referringTitle=Home

编辑2:挖越深,我可以看到我的Iesi.Collections.HashedSet导致问题。 Categorys的Standards属性被键入为Iesi.Collections.ISet,这会变成HashedSet。所以我想我真正的问题是如何检查该类型的属性,以及如何映射?

回答

2

我的猜测是Mapper.Map不知道映射比IEnumerable更深的一个级别。您是否尝试过循环集合,将它映射到类别,类别DTO级别与IEnumerable级别?

+0

最终不得不走上这条道路。有效。 – 2012-08-08 21:48:15