Automapper和NHibernate:延迟加载

时间:2015-05-11 13:30:38

标签: c# nhibernate fluent-nhibernate automapper

我有以下情况。

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);

有人为我的问题找到了更好的解决方案吗?

2 个答案:

答案 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 }))
)

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