简体   繁体   English

让AutoMapper的Map忽略一些属性?

[英]Make AutoMapper's Map ignore some properties?

My model object has some properties for lazy loaded collections and AutoMapper is for these collections to be loaded even when I don't need them (this is causing thousands of query executions in my DB). 我的模型对象有一些延迟加载集合的属性,AutoMapper用于加载这些集合,即使我不需要它们(这导致我的数据库中有数千个查询执行)。 Is it possible to make AutoMapper ignore some properties when I call Mapper.Map ? 当我调用Mapper.Map时,是否可以让AutoMapper忽略一些属性?

public TTarget Adapt<TSource, TTarget>(TSource source)
{
    return Mapper.Map<TTarget>(source);
}
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }    
}

public class Doctor
{
    public int Id { get; set; }
    public string Name { get; set;}
}

Here is how I ignore a property with Automapper (I've included how to ignore both in the source and destination object): 以下是我如何使用Automapper忽略属性(我已经在源和目标对象中包含了如何忽略它们):

Mapper.CreateMap<Person, Doctor>()
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.LastName))
      .ForMember(dest => dest.Id, opt => opt.Ignore())
      .ForSourceMember(src=> src.FirstName, opt => opt.Ignore());
Mapper.CreateMap<SourceClass, DestinationClass>()
                .ForMember(b=>b.SomeMember, c=>c.Ignore());

With AutoMapper 8.0 @Prabu's answer no longer works. 使用AutoMapper 8.0 @ Prabu的答案不再适用。

8.0 Upgrade Guide - ForSourceMember Ignore 8.0升级指南 - ForSourceMember忽略

So the adjusted answer would be: 所以调整后的答案是:

Mapper.CreateMap<Person, Doctor>()
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.LastName))
      .ForMember(dest => dest.Id, opt => opt.Ignore())
      .ForSourceMember(src=> src.FirstName, opt => opt.DoNotValidate());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM