2017-08-31 75 views
1

当使用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,而不是抛出这个丑陋的异常?

+0

请向我们展示'ReadAll'方法。请在发生异常时添加截图,以便我们看到堆栈跟踪。 – mjwills

+1

最有可能的问题是你的代码,而不是AM。试着制作一个repro。 –

+0

@LucianBargaoanu你是对的。我添加了一个答案。谢谢。 –

回答

0

我发现答案是我有一个试图从序列中获取最后一个元素的映射。相反,它应该使用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内部发生这错误是有点“麻烦“来调试。

1

引入一个从存储库中读取的变量,检查存储库是否返回了任何数据,如果它不为空,那么映射数据并返回它,否则返回空IEnumerable?

+0

但我有一个很多很多列表的对象,都有自己的列表......当然automapper应该能够处理这个!? –

相关问题