2017-08-31 113 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應該能夠處理這個!? –

相關問題