我有一个基于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属性它确实有效!