2013-02-15 9 views
8

sto cercando di mappare utilizzando AutomapperErrore di compilazione del metodo AutoMapper .ForMember. sovraccarico valido

Qui è il mio attuale mappatura:

Mapper.CreateMap(Of NameAddress, PersonalDetails)() _ 
      .ForMember(Function(dest) dest.Forenames, Function(opt) opt.MapFrom(Function(src) src.Forename)) _ 
      .ForMember(Function(dest) dest.TelephoneNumber, Function(opt) opt.MapFrom(Function(src) src.TelephoneNo1)) _ 
      .ForMember(Function(dest) dest.MobileNumber, Function(opt) opt.MapFrom(Function(src) src.MobilePhoneNo)) _ 
      .ForMember(Function(dest) dest.NationalInsuranceNumber, Function(opt) opt.MapFrom(Function(src) src.NINo)) _ 
      .ForMember(Function(dest) dest.DateOfBirth, Function(opt) opt.MapFrom(Function(src) src.BirthDate)) 

Quindi, da un oggetto di origine NameAddress, voglio mappare l'oggetto PersonalDetails destinazione. Il resto delle proprietà sia sull'origine che sulla destinazione sono le stesse, quindi le mappature non sono definite in modo esplicito.

Tuttavia quando provo a compilare utilizzando questa mappatura ottengo il seguente errore di compilazione.

Overload resolution failed because no accessible 'ForMember' can be called with these arguments: 
    'Public Function ForMember(name As String, memberOptions As System.Action(Of AutoMapper.IMemberConfigurationExpression(Of Infrastructure.NameAddress))) As AutoMapper.IMappingExpression(Of Infrastructure.NameAddress, Core.TaxiLicensing.PersonalDetails)': Lambda expression cannot be converted to 'String' because 'String' is not a delegate type. 
    'Public Function ForMember(name As String, memberOptions As System.Action(Of AutoMapper.IMemberConfigurationExpression(Of Infrastructure.NameAddress))) As AutoMapper.IMappingExpression(Of Infrastructure.NameAddress, Core.TaxiLicensing.PersonalDetails)': Expression does not produce a value. 
    'Public Function ForMember(destinationMember As System.Linq.Expressions.Expression(Of System.Func(Of Core.TaxiLicensing.PersonalDetails, Object)), memberOptions As System.Action(Of AutoMapper.IMemberConfigurationExpression(Of Infrastructure.NameAddress))) As AutoMapper.IMappingExpression(Of Infrastructure.NameAddress, Core.TaxiLicensing.PersonalDetails)': Expression does not produce a value. 

Cosa mi manca? La mia mappatura è errata? Sembra che stia tentando di utilizzare un sovraccarico della funzione che non intendo utilizzare.

risposta

15

Il mio errore ...

Avrebbe dovuto essere con:

Mapper.CreateMap(Of NameAddress, PersonalDetails)() _ 
      .ForMember(Function(dest) dest.Forenames, Sub(opt) opt.MapFrom(function(src) src.Forename)) _ 
      .ForMember(Function(dest) dest.TelephoneNumber, sub(opt) opt.MapFrom(function(src) src.TelephoneNo1)) _ 
      .ForMember(Function(dest) dest.MobileNumber, Sub(opt) opt.MapFrom(function(src) src.MobilePhoneNo)) _ 
      .ForMember(Function(dest) dest.NationalInsuranceNumber, sub(opt) opt.MapFrom(function(src) src.NINo)) _ 
      .ForMember(Function(dest) dest.DateOfBirth, Sub(opt) opt.MapFrom(function(src) src.BirthDate)) 
+1

odio vb per questo, C# è stato così divertente! – Muds

+2

Solo per salvare gli altri dalla ricerca frenetica della differenza: utilizza "Sub" anziché "Function" con il parametro "opt" –

0
Mapper.CreateMap(Of Category, DTOCategory)() _ 
     .ForMember(Function(c) c.ID, Sub(opt) opt.Ignore()) _ 
     .ForMember(Function(c) c.NAME, Sub(opt) opt.Ignore()) 
+0

Per configurare AutoMapper in VB .Net –