簡體   English   中英

自動映射器無法映射IEnumerable

[英]Automapper failing to map on IEnumerable

我有兩個類,所以:

public class SentEmailAttachment : ISentEmailAttachment
{
    public SentEmailAttachment();

    public string FileName { get; set; }
    public string ID { get; set; }
    public string SentEmailID { get; set; }
    public string StorageService { get; set; }
    public string StorageServiceFileID { get; set; }
}

public class SentEmailAttachmentItem : ISentEmailAttachment
{
    [ItemName]
    public string ID { get; set; }
    public string SentEmailID { get; set; }
    public string FileName { get; set; }
    public string StorageService { get; set; }
    public string StorageServiceFileID { get; set; }
}

正如您所看到的那樣相同(它們都實現接口以確保這一點)

然后我有以下映射:

Mapper.CreateMap<IEnumerable<SentEmailAttachmentItem>, IEnumerable<SentEmailAttachment>>();
Mapper.CreateMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>();

然后我進行了以下單元測試:

//create a load of sent email attachments
var listOfSentEmailAttachments = new List<SentEmailAttachment>();

for (int i = 0; i < 10; i++)
    listOfSentEmailAttachments.Add(new SentEmailAttachment { FileName = "testFileName", ID = Guid.NewGuid().ToString(), SentEmailID = Guid.NewGuid().ToString(), StorageService = "S3", StorageServiceFileID = "SomeFileID" });

var sentEmailAttachmentItems = Mapper.DynamicMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>(listOfSentEmailAttachments);

var itemToTest = sentEmailAttachmentItems.First();

Assert.IsInstanceOfType(itemToTest, typeof(SentEmailAttachmentItem));

這失敗 - IEnumerable sentEmailAttachmentItems為空。 它沒有將SentEmailAttachments列表映射到它......

知道發生了什么事嗎?

我讓它處理單個對象(將每個對象映射到每個對象之一)但不是集合...

您不需要顯式映射集合類型,只需要映射項類型。 做就是了:

Mapper.CreateMap<SentEmailAttachment, SentEmailAttachmentItem>();
var attachments = Mapper.Map<IEnumerable<SentEmailAttachment>, List<SentEmailAttachmentItem>>(someList);

這將工作得很好。

編輯 :我找到了一個簡單的方法來使用DynamicMap與集合。

IEnumerable<FakeItem> unmappedItems = Repository.GetItems();
IEnumerable<MappedItem> mappedItems = unmappedItems.Select(Mapper.DynamicMap<MappedItem>);

- 原始信息 -

Jimmy說使用它的方式很有效,但我盡量避免使用DynamicMap來避免為我需要的每個映射做“CreateMap”。 我不認為DynamicMap可以很好地處理集合,如果有的話。 它不會拋出異常,但結果是空集。

通過過去幾天的測試,您不能在此時使用DynamicMap進行收藏(我知道)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM