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());
您必须添加一个条件来验证集合是否初始化为映射。您可以在此处阅读更多详细信息:Automapper: Ignore on condition of.
AutoMapper.Mapper.CreateMap<DictionaryEntity, DictionaryDto>()
.ForMember(dest => dest.DictionaryRecord, opt => opt.PreCondition(source =>
NHibernateUtil.IsInitialized(source.DictionaryRecord)));
我有以下场景。
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());
您必须添加一个条件来验证集合是否初始化为映射。您可以在此处阅读更多详细信息:Automapper: Ignore on condition of.
AutoMapper.Mapper.CreateMap<DictionaryEntity, DictionaryDto>()
.ForMember(dest => dest.DictionaryRecord, opt => opt.PreCondition(source =>
NHibernateUtil.IsInitialized(source.DictionaryRecord)));