Automapper throwing System.Reflection.AmbiguousMatchException: Ambiguous match found

Viewed 1594

I have a piece of code that throws exception and I dont quite understand why.

 public  async Task<List<CategoryVm>> Handle(GetCategoriesListQuery request, CancellationToken cancellationToken)
    {
        var categories = (await _categoryRepository.ListAllAsync()).OrderBy(x => x.Name);
      //  var list = categories.ToList();
        return _mapper.Map<List<CategoryVm>>(categories);
    }

enter image description here

I managed to get around problem as below. Would be be nice know why this works.

  public  async Task<List<CategoryVm>> Handle(GetCategoriesListQuery request, CancellationToken cancellationToken)
    {
        var categories = (await _categoryRepository.ListAllAsync()).OrderBy(x => x.Name);
        var list = categories.ToList();
        return _mapper.Map<List<CategoryVm>>(list);
    }

Category and CategoryVm

public class CategoryVm
{
    public Guid CategoryId { get; set; }
    public string Name { get; set; } 
}
public class Category: AuditableEntity
{
    public Guid CategoryId { get; set; }
    public string Name { get; set; }
    public ICollection<Event> Events { get; set; }
}
3 Answers

In my case, the cause was using .OrderBy() method. My workaround was to use ordering afterwards mapping. If that's important, I'm using Automapper 11.0.0

In AutoMapper version 11.0.1 (now available) this bug is solved: calling IMapper.Map after an OrderBy caused an AmbiguousMatchException in version 11.0.0.

(A link to this GitHub issue was shared by @Lucian Bargaoanu in a comment already, while the issue was in progress. Thanks for sharing!)

In my case, I had to add a .ToList() prior to calling ``.Map'' I'm using Automapper 11.0.0

Related