2017-04-12 99 views
0

我一直在尝试使用AutoMapper,但是我在配置地图时遇到了问题。AutoMapper地图复杂对象

有了这个:

public class A 
{ 
    public B b { get; set; } 
    public C c { get; set; } 
    public int id { get; set; } 
    public string X { get; set; } 
} 

public class B 
{ 
    public int id { get; set; } 
    public string Y { get; set; } 
} 

public class C 
{ 
    public int id { get; set; } 
    public string Z { get; set; } 
} 

public class ABC 
{ 
    public int Aid { get; set; } 
    public string AX { get; set; } 
    public int Bid { get; set; } 
    public string BY { get; set; } 
    public int Cid { get; set; } 
    public string CZ { get; set; } 
} 

我如何做映射A> ABC和ABC> A.

我不希望每个属性手动映射。可能吗?

谢谢。

+0

通常,automapper要求属性名称相同。对于需要配置映射的不同名称。所以在你的情况下,你必须在automapper中映射每个属性。 –

+0

如何更改不必配置映射? – user2653142

回答

1

我不确定你的意思是“我不想手动映射每个属性”。但使用AutoMapper,您可以轻松映射属性:

 Mapper.Initialize(cfg => cfg.CreateMap<A, ABC>() 
      .ForMember(dest => dest.AX, opt => opt.MapFrom(src => src.X)) 
      .ForMember(dest => dest.Aid, opt => opt.MapFrom(src => src.id)) 
      .ForMember(dest => dest.BY, opt => opt.MapFrom(src => src.b.Y)) 
      .ForMember(dest => dest.Bid, opt => opt.MapFrom(src => src.b.id)) 
      .ForMember(dest => dest.CZ, opt => opt.MapFrom(src => src.c.Z)) 
      .ForMember(dest => dest.Cid, opt => opt.MapFrom(src => src.c.id))); 

     var a = new A 
     { 
      X = "I am A", 
      id = 0, 
      b = new B() 
      { 
       Y = "I am B", 
       id = 1 
      }, 
      c = new C() 
      { 
       Z = "I am C", 
       id = 2 
      } 
     }; 

     var abc = Mapper.Map<A, ABC>(a); 
+0

是否可以设置一些映射规则?有很多属性... – user2653142