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

このプロパティには、呼び出しているインスタンスに 2 つの標準オブジェクトが含まれています。問題は、Category から 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 が問題を引き起こしていることがわかります。カテゴリの Standards プロパティは Iesi.Collections.ISet として型付けされ、これは HashedSet に変換されます。したがって、私の本当の質問は、そのタイプのプロパティをどのように確認し、どのようにマップできるのでしょうか?

4

1 に答える 1

2

私の推測では、Mapper.Map は IEnumerable よりも 1 レベル深くマップすることを認識していません。コレクションをループして、Category、CategoryDTO レベルと IEnumerable レベルでマッピングしてみましたか?

于 2012-08-08T20:01:12.820 に答える