2013-02-15 29 views
8

Ben AutoMapper .ForMember yöntemi derleme hatası. Geçersiz aşırı yük

İşte benim şimdiki haritalama olan Automapper

kullanarak harita çalışıyorum: Bir NameAddress kaynak nesneden Yani

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)) 

, ben PersonalDetails hedef nesnesine eşleştirmek istiyoruz. Özelliklerin hem kaynak hem de hedef üzerindeki geri kalanı aynıdır, bu nedenle eşlemeleri açıkça tanımlanmamıştır.

Ancak, bu eşlemeyi kullanarak derlemeye çalıştığımda aşağıdaki derleme zamanı hatası alıyorum.

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. 

Neyi eksik? Haritalarım yanlış mı? Kullanmaya niyet etmediğim işlevin aşırı yüklenmesine çalışılıyor gibi görünüyor.

cevap

15

Hatam ...

kullanılarak olmalıydı:

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

Bunun için fi nefret, C# çok eğlenceli! – Muds

+2

Sadece diğerlerini fark etmek için farklılıkları kaydetmek için - "opt" yerine "Function" yerine "Sub" kullanıyor. –

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'te AutoMapper'ı Yapılandır. –