2012-05-03 44 views
1

我使用Automapper進行以下操作,但由於客戶端的聯繫人表中沒有記錄,因此我得到一個未設置爲對象實例的對象引用錯誤。使用AutoMapper處理空對象

存在一個聯繫人集合,但Contacts.ContactEmails集合爲null。

處理這個問題的最好方法是什麼?

Mapper.CreateMap<Client, ClientGrid>() 
..ForMember(to => to.OfficeEmail, opt => opt.MapFrom(from => from.Contacts == null ? "" : from.Contacts.SingleOrDefault().ContactEmails.FirstOrDefault().Email)); 

回答

1

可以修改Contact類有一個獲取屬性將返回第一ContactEmail,如果有的話,否則返回null?然後,您可以改爲映射到該屬性。

+0

有幾封電子郵件對每個Conact,除了它的實體的集合。 – okenshield

+0

無論如何,您的代碼只映射第一封電子郵件,是否打算映射其他人?此外,您可以將屬性添加到實體對象,因爲它們是部分類。 –

0

我用.ConvertUsing<MyTypeConverter>()來解決這個問題:

Mapper.CreateMap<Client, ClientGrid>() 
    .ConvertUsing<ClientToClientGridConverter>(); 


class WsMembershipToDeMemberConverter 
    : AutoMapper.ITypeConverter<Client, ClientGrid> 
{ 
    public ClientGrid Convert(AutoMapper.ResolutionContext context) 
    { 
     if (context == null || context.IsSourceValueNull) 
     { 
      return null; 
     } 

     var client = context.SourceValue as Client; 

     var clientGrid = new ClientGrid(); 

     // conversion rules and logics here 

     return clientGrid 
    } 
}