简体   繁体   English

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

[英]Automapper fails for objects with collections where items use ConvertUsing<>()

My example: 我的例子:

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

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

With mapping config: 使用映射配置:

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

When converting BoxVM will Items , the ItemTypeConverter is not called. 转换BoxVM will Items ,不会调用ItemTypeConverter Leaving an empty Items collection in Box . Box保留一个空的Items集合。

The BoxId is being mapped correctly. BoxId已正确映射。

Am I missing a step? 我错过了一步吗?

Looks like it does work. 看起来确实有效。

 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 };
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM