Automapper 和 NHibernate:延迟加载

Automapper and NHibernate: lazy loading

我有以下场景。

public class DictionaryEntity
{
    public virtual string DictionaryName { get; set; }

    public virtual IList<DictionaryRecordEntity> DictionaryRecord { get; set; }
}

public class DictionaryDto
{
     public string DictionaryName { get; set; }

     public IList<DictionaryRecordEntity> DictionaryRecord { get; set; }
}

我正在使用 Automapper 和 NHibernate。在 NHibernate 中 DictionaryRecord 属性 被标记为 lazy loaded.

当我从 DictionaryEntity -> DictionaryDto 进行映射时,Automapper 会加载我所有的 DictionaryRecords。

但我不想要这种行为,有没有一种方法可以配置 Automapper 以便在我真正访问它之前不解析此 属性 属性.

我针对这种情况的解决方法包括将 DictionaryEntity 拆分为 2 类 并创建第二个 Automapper 映射。

public class DictionaryDto
{
     public string DictionaryName { get; set; }
}

public class DictionaryDtoFull : DictionaryDto
{
     public IList<DictionaryRecordEntity> DictionaryRecord { get; set; }
}

然后在代码中,根据需要,适当调用AutoMapper.Map。

return Mapper.Map<DictionaryDto>(dict);            
return Mapper.Map<DictionaryDtoFull>(dict);

有人对我的问题有更好的解决方案吗?

你可以忽略属性,这个有用吗?

AutoMapper.Mapper.CreateMap<DictionaryEntity, DictionaryDto>()
    .ForMember(dest => dest.DictionaryRecord,
               opts => opts.Ignore());

http://cpratt.co/using-automapper-mapping-instances/

您必须添加一个条件来验证集合是否初始化为映射。您可以在此处阅读更多详细信息:Automapper: Ignore on condition of.

AutoMapper.Mapper.CreateMap<DictionaryEntity, DictionaryDto>()
    .ForMember(dest => dest.DictionaryRecord, opt => opt.PreCondition(source =>
        NHibernateUtil.IsInitialized(source.DictionaryRecord)));