2

我无法让 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

在我调用的实例中,该属性包含两个标准对象。问题是当我从我的类别映射到我的 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 的内容,我可以看到它为空。我本来希望我的标准已经映射,但我确定我错过了 ValueInjector 的一些东西。可能类似于告诉它如何将 Standard 映射到 StandardDTO。有什么想法吗?

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

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

4

1 回答 1

2

我的猜测是 Mapper.Map 不知道映射比 IEnumerable 更深的一层。您是否尝试过遍历集合,将其映射到 Category、CategoryDTO 级别与 IEnumerable 级别?

于 2012-08-08T20:01:12.820 回答