具有集合的对象的自动映射失败,其中项目使用ConvertUsing<>()

时间:2017-02-22 11:34:25

标签: automapper

我的例子:

class BoxVM {
    int BoxId {get;set;}
    List<ItemVM> Items {get;set;}
}

class Box {
    int BoxId {get;set;}
    List<Item> Items {get;set;}
}

使用映射配置:

 CreateMap<BoxVM, Box>();
 CreateMap<ItemVM, Item>().ConvertUsing<ItemTypeConverter>();

转换BoxVM Items时,ItemTypeConverter不会被调用。在Items中留下空的Box集合。

BoxId正确映射。

我错过了一步吗?

1 个答案:

答案 0 :(得分:0)

看起来确实有效。

 using System.Collections.Generic;

 using AutoMapper;

    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {

            Mapper.Initialize(cfg =>
                {
                    cfg.CreateMap<BoxVM, Box>();
                    cfg.CreateMap<ItemVM, Item>().ConvertUsing<ItemTypeConverter>();

                });
            Mapper.AssertConfigurationIsValid();

            var boxVm = new BoxVM()
            {
                Value1 = "5",
                Items = new List<ItemVM> { new ItemVM { Name = "Item1" } }
            };

            var result = Mapper.Map<BoxVM, Box>(boxVm);

            Assert.AreEqual(1, result.Items.Count);
        }
    }

    public class Box
    {
        public string Value1 { get; set; }
        public List<Item> Items { get; set; }
    }

    public class Item
    {
        public string Name { get; set; }
    }

    public class BoxVM
    {
        public string Value1 { get; set; }
        public List<ItemVM> Items { get; set; }
    }

    public class ItemVM
    {
        public string Name { get; set; }
    }

    public class ItemTypeConverter : ITypeConverter<ItemVM, Item>
    {
        public Item Convert(ItemVM source, Item destination, ResolutionContext context)
        {
            return new Item { Name = source.Name };
        }
    }