2013-02-15 121 views
8

我試圖用AutomapperAutoMapper .ForMember方法編譯錯誤。無效超載

這是我當前的映射來映射:

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)) 
從NameAddress源對象

所以,我想映射到PersonalDetails目標對象。源和目標上的其餘屬性都是相同的,因此不顯式定義映射。

但是,當我嘗試使用此映射進行編譯時,我得到以下編譯時錯誤。

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. 

我錯過了什麼?我的映射不正確?它似乎試圖使用我不打算使用的函數的重載。

回答

15

我的錯......

應該使用已經:

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

我恨VB爲此,C#是很有趣! – Muds 2015-09-10 13:17:26

+2

只是爲了節省他人瘋狂尋找差異 - 他使用「Sub」而不是「Function」與「opt」參數 – 2016-02-01 18:13:16

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

在VB.Net中配置AutoMapper – 2016-05-14 20:55:54