0

次のような1対多の関係であるPOCO / DTOがあります。

Public Class Main1
    Public A As Integer
    Public Subs As New List(Of Sub1)
End Class

Public Class Sub1
    Public B As Integer
End Class

そして、次のようなビジネスロジック部分があります。

Public Class Main2
    Public A As Integer
    Public Subs As New Sub2Set()
End Class

Public Class Sub2Set
    Public Subs As New List(Of Sub2)

    Public Sub Add(ByVal Sub2 As Sub2)
        'Do some validation checks here.
        Me.Subs.Add(Sub2)
    End Sub
End Class

Public Class Sub2
    Public B As Integer
End Class

私は、 (1) 関連するメソッドのみを公開し、(2)追加されたメソッドがルールに違反していないことSub2Setを確認するために を使用しています。Sub2

automapper を使用して Main1 とその子を Main2 に、またはその逆にマップするにはどうすればよいですか?

4

1 に答える 1

0

これまでのところ、一方向に動作するようになりました:

AutoMapper.Mapper.CreateMap(Of Sub1, Sub2)()
AutoMapper.Mapper.CreateMap(Of List(Of Sub1), Sub2Set)().ForMember(Function(d) d.Subs, Sub(o) o.MapFrom(Function(s) s))
AutoMapper.Mapper.CreateMap(Of Main1, Main2)().ForMember(Function(d) d.Subs, Sub(o) o.ResolveUsing(Of SubResolver)())

Dim Main2 As Main2 = AutoMapper.Mapper.Map(Of Main2)(Main1)

カスタムリゾルバを使用

Public Class SubResolver
    Inherits AutoMapper.ValueResolver(Of Main1, Sub2Set)

    Protected Overrides Function ResolveCore(ByVal source As Main1) As Sub2Set
        Return AutoMapper.Mapper.Map(Of Sub2Set)(source.Subs)
    End Function

End Class
于 2013-11-06T21:25:24.397 に答える