सवाल Automapper 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 भेजाEmailAttachmentItems खाली है। इसने SentEmailAttachments की सूची को मैप नहीं किया है ...

कोई विचार क्या चल रहा है ??

मैं इसे एकल वस्तुओं पर काम कर रहा हूं (प्रत्येक में से प्रत्येक में से एक को मैप करना) लेकिन संग्रह नहीं ...


44
2018-04-15 12:47


मूल




जवाब:


आपको संग्रह प्रकारों, केवल आइटम प्रकारों को स्पष्ट रूप से मानचित्र करने की आवश्यकता नहीं है। बस करो:

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

यह ठीक काम करेगा।


101
2018-04-15 15:16





संपादित करें: मुझे संग्रह के साथ डायनामिक मैप का उपयोग करने का एक आसान तरीका मिला।

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

- वास्तविक सन्देश -

जिस तरह जिमी इसका उपयोग करने के लिए कहता है, लेकिन मैं डायनामिक मैप का उपयोग करने की कोशिश करता हूं जब मैं आवश्यक मैपिंग के लिए "CreateMap" करने से बचने के लिए कर सकता हूं। मुझे नहीं लगता कि डायनामिक मैप संग्रह के साथ बहुत अच्छी तरह से काम करता है, अगर बिलकुल भी। यह अपवाद नहीं फेंकता है, लेकिन परिणाम एक खाली सेट है।

पिछले कुछ दिनों में परीक्षण से, आप इस समय संग्रह के लिए डायनामिक मैप का उपयोग नहीं कर सकते (जिसे मैं जानता हूं)।


11
2018-03-06 20:39