'Automapper throwing System.Reflection.AmbiguousMatchException: Ambiguous match found
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);
}
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; }
}
Solution 1:[1]
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
Solution 2:[2]
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!)
Solution 3:[3]
In my case, I had to add a .ToList()
prior to calling ``.Map''
I'm using Automapper 11.0.0
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Tropin Alexey |
Solution 2 | |
Solution 3 | KornMuffin |