AutoMapper可以限制映射或映射的深度

Dan*_*rik 4 nhibernate lazy-loading automapper

AutoMapper非常棒,节省了大量时间,但当我开始查看应用程序的性能时,AutoMapper负责性能损失.

我正在使用NHibernate的延迟加载.大多数情况下,需要父实体而根本不需要访问子实体.实际上,发生的事情是AutoMapper尝试映射尽可能多的关系,导致NHibernate延迟加载所有子实体(我看到SELECT N + 1一直在发生).

有没有办法限制AutoMapper的深度,或者AutoMapper可以懒惰地映射子实体?

Sam*_*Sam 5

您可以将ignore方法用于不需要加载的关联.

Mapper.CreateMap<User, UserDto>()
    .ForMember(dest => dest.LazyCollection, opt => opt.Ignore())
    .ForMember(dest => dest.AnotherLazyCollection, opt => opt.Ignore())
Mapper.CreateMap<UserProperty, UserPropertyDto>()
    .ForMember(dest => dest.PropertyLazyReference, opt => opt.Ignore());
return Mapper.Map<User, UserDto>(user);
Run Code Online (Sandbox Code Playgroud)

对于您知道在dto中需要的关联,您应该查看使用初始查询更有效地获取这些关联的方法,但这是一个全新的问题.