AutoMapper无法将DTO映射到集合

时间:2016-07-14 11:13:46

标签: asp.net-mvc wcf nhibernate lazy-loading automapper

我有一个基于NHibernate的WCF服务和Lazy-loading。如果我通过Session.Load在NHiberate中加载实体,我会得到多个SQL查询,因为他加载了所有的关系。有时候我不想加载所有东西,所以我决定使用DTO。但我怎么能做到这一点?

我试图让AutoMapper工作但目前没有成功。我该如何压扁物体?或者我可以用什么其他最佳实践来处理没有关系的实体加载,也许只有关系的ID?

的Global.asax:

protected void Application_Start(object sender, EventArgs e)
    {
        // AutoMapper
        AutoMapper.Mapper.Initialize(config =>
        {
            // ServicesRegistration
            config.CreateMap<ServicesPlanning, ServicesPlanningDto>();
            config.CreateMap<ServicesPlanningEquipment, ServicesPlanningEquipmentDto>();
        });
    }

DTO课程

[DataContract(IsReference = true)]
public class ServicesPlanningDto
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public IList<ServicesPlanningEquipmentDto> Equipment { get; set; }
}

[DataContract(IsReference = true)]
public class ServicesPlanningEquipmentDto : IEntity<int>
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name{ get; set; }
}

查询:

        return (from sp in Session.Query<ServicesPlanning>()
                 where sp.Id == 1
                 select sp).ProjectTo<ServicesPlanningDto>().SingleOrDefault();

查询错误

  

其他信息:类型对象System.Linq.EnumerableQuery 1[IWS.DataContracts.ServicesPlanningDto]' cannot be converted to type 'System.Linq.IQueryable 1 [System.Object []]&#39;。

但是如果我评论IList属性它确实有效!

0 个答案:

没有答案