我有以下情况。
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 - &gt;进行制图时 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);
有人为我的问题找到了更好的解决方案吗?
答案 0 :(得分:3)
您必须添加条件以验证是否初始化集合以进行映射。您可以在此处阅读更多详细信息:Automapper: Ignore on condition of。
AutoMapper.Mapper.CreateMap<DictionaryEntity, DictionaryDto>()
.ForMember(dest => dest.DictionaryRecord, opt => opt.PreCondition(source =>
NHibernateUtil.IsInitialized(source.DictionaryRecord)));
答案 1 :(得分:0)
如果使用此属性,您可以忽略该属性吗?
@(Html.Kendo().Grid<MyModel>()
.Name("grid")
.DataSource(ds => ds
.Ajax()
.Read("MyAction", "Home", new { startDate = DateTime.Now.AddDays(-7), endDate = DateTime.Now }))
)