2016-04-29 1 views
2

個々のオブジェクトを、オートマトンを使用してオブジェクトの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

関連する問題