C#-Automapper和NHibernate:延迟加载

我有以下情况.

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属性被标记为延迟加载.

当我从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: Ignore on condition of.

AutoMapper.Mapper.CreateMap<DictionaryEntity, DictionaryDto>()
    .ForMember(dest => dest.DictionaryRecord, opt => opt.PreCondition(source =>
        NHibernateUtil.IsInitialized(source.DictionaryRecord)));
上一篇:哪种方法最好? AutoMapper反对隐式(C#参考)


下一篇:c# – 使用AutoMapper,“相同类型的实体已经具有相同的主键值”错误