我正在使用breeze来调用web api方法:
Repository.ShipmentAppeals.Where(sa => sa.ShipmentID == shipmentID).Select(sa => sa.Appeal).Include("Case");
我的微风查询如下:
var query = EntityQuery.from('GetEditShipmentAppeals')
.withParameters({ shipmentID: shipmentID, caseID: caseID })
.orderByDesc("Case.ID")
GetEditShipmentAppeals是一个包含第一个查询的web api方法。尽管在查询中使用了.Include(“Case”),但我无法在微风查询的order by子句中使用“Case.ID”。
var query = EntityQuery.from('Appeals')
.expand("Case,Patient")
.orderByDesc("Case.ID").inlineCount();
即使我在一个不涉及web api中的EF查询的微风查询中使用导航属性,它也不起作用。在上面的查询中,Case是Appeal表中的导航属性。
答案 0 :(得分:1)
如果我正确理解您的示例,那么我认为这是一个实体框架问题。我的理解是实体框架不支持投影上的“包含”。见http://connect.microsoft.com/VisualStudio/feedback/details/347543/entity-framework-eager-loading-not-working-in-some-projection-scenarios。
为了确认这一点,我会尝试单独执行你的EF查询,看看“包含”是否真的在做任何事情。我的猜测是,它不是。
但是,您仍然可以通过略微不同的服务器端投影来完成您想要的任务。 (我不确定什么对象'Case'是属性的,语法可能有点偏,但是......)类似的东西:
Repository.ShipmentAppeals.Where(sa => sa.ShipmentID == shipmentID).Select(sa => new
{ Appeal: sa.Appeal, Case: sa.Appeal.Case, CaseId: sa.Appeal.Case.Id });
请注意,Breeze将从此查询返回一组“匿名”javascript对象,但每个对象(即Appeals和Cases)中的每个“实体”都将是完整的Breeze实体,并且将成为EntityManager的一部分缓存。