Automapper:序列不包含任何元素。
当使用Automapper,象这样一个通用存储库:Automapper:序列不包含任何元素。
/// <summary>
/// Gets all DTOs
/// </summary>
/// <returns></returns>
/// <exception cref="System.ArgumentNullException"></exception>
public virtual IEnumerable<TDto> GetAll()
{
return Mapper.Map<List<TDto>>(_repository.ReadAll());
}
Automapper抛出一个异常“序列不包含任何元素”,如果存储库不返回任何记录。
完全有可能在调用方法时记录可能不存在。
有没有办法让Automapper在没有记录存在的情况下返回一个空的IEnumerable,而不是抛出这个丑陋的异常?
我发现答案是我有一个试图从序列中获取最后一个元素的映射。相反,它应该使用LastOrDefault:
我改变:
ForMember(dest => dest.PlacedObjectDimension, opt => opt.MapFrom(src => src.PlacedObjectDimensions.ToList().Last()));
到:
.ForMember(dest => dest.PlacedObjectDimension, opt => opt.MapFrom(src => src.PlacedObjectDimensions.ToList().LastOrDefault()));
,因为这是一个地图defnition内部发生这错误是有点“麻烦“来调试。
引入一个从存储库中读取的变量,检查存储库是否返回了任何数据,如果它不为空,那么映射数据并返回它,否则返回空IEnumerable?
但我有一个很多很多列表的对象,都有自己的列表......当然automapper应该能够处理这个!? –
请向我们展示'ReadAll'方法。请在发生异常时添加截图,以便我们看到堆栈跟踪。 – mjwills
最有可能的问题是你的代码,而不是AM。试着制作一个repro。 –
@LucianBargaoanu你是对的。我添加了一个答案。谢谢。 –