2016-04-29 130 views
2

我试图将单个对象映射到使用automapper的对象的ICollection中,示例布局是这样的...Automapper:将类型对象上的单个成员映射到对象的Icollection

public class BarDto { 
    public int id {get;set;} 
    public int name {get;set;} 
    public ICollection<ExampleObject> FooCollection {get;set;} 
} 

public class Bar { 
    public int id {get;set;} 
    public int name {get;set;} 
    public ExampleObject Foo {get;set;} 
} 


Mapper.CreateMap<BarDto, Bar>() 
      .ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => src.Foo)); 

有无论如何将src.foo转换为列表等被接受为ICollection?

回答

3

你可以做到以下几点:

Mapper.CreateMap<Bar, BarDto>() 
     .ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => new List<ExampleObject>() { src.Foo })); 

或者你可以实现你自己的ValueResolver<ExampleObject, List<ExampleObject>>

,并做一些事情,如:

public class ExampleResolver: ValueResolver<ExampleObject, List<ExampleObject>> 
{ 
    protected override List<ExampleObject> ResolveCore(ExampleObject source) 
    { 
     return new List<ExampleObject>() { source }; 
    } 
} 

然后:

Mapper.CreateMap<BarDto, Bar>() 
     .ForMember(dest => dest.FooCollection, opts => opts.ResolveUsing<ExampleResolver>()); 

二段ond方法通常用于更复杂的情况,但您可以选择任何您想要的方法。

希望它有帮助。

+0

ValueResolver的作品:)干杯,我会认为第一个例子会工作太多,但由于某种原因倒下,可能是与对象上的更深/更深的地图有关。 –

+0

我想这第一个例子不起作用,因为''中类型的顺序错误。得到修复。 – MaKCbIMKo

+0

无论如何,高兴地帮助:) – MaKCbIMKo

相关问题