2012-05-03 15 views
1

私はAutomapperを次のように使用していますが、クライアントの連絡先テーブルにレコードがないため、オブジェクト参照がオブジェクトのインスタンスに設定されていません。エラー。AutoMapperでNULLオブジェクトを処理する

連絡先のコレクションは存在しますが、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

あなたはそれ以外の場合は取得可能な場合、最初の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 
    } 
} 
関連する問題