如何在不创建新对象的情况下使Automapper使用精确值

时间:2016-12-14 13:21:02

标签: c# automapper

如何在不创建新对象的情况下使Automapper使用精确值?

using System.Collections.Generic;
using AutoMapper;

namespace Program
{
    public class A { }

    public class B
    {
        public A Aprop { get; set; }
    }

    public class C
    {
        public A Aprop { get; set; }
    }

    class Program
    {
        private static void Main(string[] args)
        {
            AutoMapper.Mapper.Initialize(cnf =>
            {
                // I really need this mapping. Some additional Ignores are present here.
                cnf.CreateMap<A, A>(); 
                // The next mapping should be configured somehow 
                cnf.CreateMap<B, C>(); //.ForMember(d => d.Aprop, opt => opt.MapFrom(...)) ???
            });
            A a = new A();
            B b = new B() {Aprop = a};
            C c = Mapper.Map<C>(b);
            var refToSameObject = b.Aprop.Equals(c.Aprop); // Evaluates to false
        }
    }
}

如何更改cnf.CreateMap<B, C>();行以使refToSameObject变量具有true值?如果我删除cnf.CreateMap<A, A>();它会以这种方式工作,但是我无法将其删除,因为有时我会使用automapper从其他A类更新A类。

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是在构建ConstructUsing期间使用Aprop并设置C

AutoMapper.Mapper.Initialize(cnf =>
{
    cnf.CreateMap<A, A>(); 
    cnf.CreateMap<B, C>()
        .ConstructUsing(src => new C() { Aprop = src.Aprop })
        .ForMember(dest => dest.Aprop, opt => opt.Ignore());
});

这应该有效,并且假设它只是一个属性而不是太痛苦。