【问题标题】:Handling Null objects with AutoMapper使用 AutoMapper 处理 Null 对象
【发布时间】:2012-05-03 17:05:20
【问题描述】:

我正在使用 Automapper 进行以下操作,但由于客户端的联系人表中没有记录,我得到一个 对象引用未设置为对象实例。 错误。 p>

存在联系人集合,但 Contacts.ContactEmails 集合为空。

处理这个问题的最佳方法是什么?

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

【问题讨论】:

    标签: c# linq entity-framework entity-framework-4 automapper


    【解决方案1】:

    您能否修改 Contact 类,使其具有一个 get 属性,该属性将返回第一个 ContactEmail(如果可用),否则返回 null?然后您可以改为映射到该属性。

    【讨论】:

    • 除了它是一个实体集合之外,还有几封针对每个 Conact 的电子邮件。
    • 无论如何,您的代码只映射第一封电子邮件,您是否打算映射其他电子邮件?此外,您可以向实体对象添加属性,因为它们是部分类。
    【解决方案2】:

    我用.ConvertUsing&lt;MyTypeConverter&gt;()解决了这个问题:

    Mapper.CreateMap<Client, ClientGrid>()
        .ConvertUsing<ClientToClientGridConverter>();
    
    
    class ClientToClientGridConverter
        : 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 logic here
    
            return clientGrid 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      相关资源
      最近更新 更多