Breezejs投影不适用于引用一对多导航器

Breezejs投影不适用于引用一对多导航器,breeze,Breeze,我有以下型号: 1人对多参与者(“注册”是导航) 如果我只想知道此人的姓名和所有注册的日期,那么这不起作用: EntityQuery.from('Person').where('id','eq',id) .select('firstName, lastName, enrollments.dateEnrolled') .execute() 我得到一个错误: Unable to locate property 'DateEnrolled' on typ

我有以下型号: 1人对多参与者(“注册”是导航)

如果我只想知道此人的姓名和所有注册的日期,那么这不起作用:

EntityQuery.from('Person').where('id','eq',id)
           .select('firstName, lastName, enrollments.dateEnrolled')
           .execute()
我得到一个错误:

 Unable to locate property 'DateEnrolled' on type 
'System.Collections.Generic.ICollection`1[EntityClasses.Participant]'

在一对多关系上投影字段的正确语法是什么?

在单个查询中没有真正好的方法来表达这一点。您可以获得所有“注册”,但需要在客户端上选择“DateRegistered”

EntityQuery.from('Person').where('id','eq',id)
       .select('firstName, lastName, enrollments').expand("enrollments")
       .execute().then(function(data) {
       // extract "dateEnrolled" from data.results
});
或者,您可以在执行投影的服务器上使用“命名查询”,只需从客户端查询投影即可

或者更好的方法是反转查询,类似这样:(假设“注册”类型中有一个名为“Person”的标量属性)


我在breeze.server.net的fork上实现了这一点:

你能提供一个命名查询的示例吗?它只是一个返回DTO集合的webApi服务器方法吗?它只是一个返回DTO的webApi服务器方法,例如,请参见(“将参数传递到服务器”子主题).但是…为了简单起见,我的最后一个建议,即反转查询,是我真正建议的。谢谢,不幸的是,我有很多关系需要引入,而不仅仅是一个,所以我相信最后一个建议已经过时了。我将尝试一下DTO选项。你找到了比下面的建议更好的方法吗?
EntityQuery.from('Enrollments').where('person.id','eq',id)
       .select('person.firstName, person.lastName, dateEnrolled').expand("person")
       .execute().then(...);