我有两个类,如:
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列表映射到它......
知道发生了什么事吗?
我让它处理单个对象(将每个对象中的一个映射到每个对象)但不是集合......
答案 0 :(得分:109)
您不需要显式地映射集合类型,只需要映射项类型。只是做:
Mapper.CreateMap<SentEmailAttachment, SentEmailAttachmentItem>();
var attachments = Mapper.Map<IEnumerable<SentEmailAttachment>, List<SentEmailAttachmentItem>>(someList);
这样就可以了。
答案 1 :(得分:11)
编辑:我找到了一种将DynamicMap与集合结合使用的简便方法。
IEnumerable<FakeItem> unmappedItems = Repository.GetItems();
IEnumerable<MappedItem> mappedItems = unmappedItems.Select(Mapper.DynamicMap<MappedItem>);
- 原始讯息 -
Jimmy说使用它的方式有效,但我尽量避免为我需要的每个映射做“CreateMap”。我不认为DynamicMap可以很好地处理集合,如果有的话。它不会抛出异常,但结果是空集。
在过去几天的测试中,您目前无法使用DynamicMap进行收藏(我知道)。