在我的BreezeController
我有一个返回带有两个属性的DTO的方法。一个属性是我的一个实体的导航属性,另一个属性是布尔值:
Public Function ProjectList() As IQueryable
Return From p In _contextProvider.Context.Projects
Where Not p.IsDeleted
Select New ProjectListItem() With {
.Project = p,
.HasTasks = (From t In _contextProvider.Context.ProjectTasks Where t.ProjectID = p.ID).Any()
}
End Function
Public Class ProjectListItem
Public Property Project As Project
Public Property HasTasks As Boolean
End Class
针对此方法的简单查询工作正常,但我的Project
类有一组项目经理,并使用" any"在将查询发送到服务器之前,在Breeze客户端代码中对此集合的查询失败,并显示以下错误消息:
Exception was thrown at line 10698, column 13 in http://localhost:2780/myapp/Scripts/breeze.debug.js
0x800a138f - JavaScript runtime error: Unable to get property 'isAnonymous' of undefined or null reference
这是proto._validate
的{{1}}方法,其中FnNode
为空。
我的查询(我试图找到特定项目经理的所有项目)是分段建立的,但相关部分是:
entityType
我创建其他谓词并通过相同的通用逻辑运行它们并且它们工作正常,所以它似乎仅限于"任何"查询,例如这个有用...
var p = breeze.Predicate.create("ProjectManagerID", op.Equals, id);
var predicate = breeze.Predicate.create("Project.ProjectManagers", "any", p);
// code common to all queries...
var query = breeze.EntityQuery.from("ProjectList");
query = query.where(predicate);
query = query.select("Project.Prop1,Project.Prop2,Project.etc,HasTasks");
return query.using(this.manager).execute();
我仍在使用Breeze 1.4.16(WebAPI v1,.NET 4.0),但尝试将Breeze.Client包更新为1.5.1,这没什么区别。
任何想法我做错了什么?
如果我手动构建我正在寻找的OData查询,那么我得到了我想要的结果,例如。
predicate = breeze.Predicate.create("Project.ClientNumber", op.Contains, search)
.or("Project.ClientName", op.Contains, search)
.or("Project.Notes", op.Contains, search);