我正在和Breeze一起工作并且喜欢它,但遇到了一两个人,我希望能得到一点帮助。
我在数据库第一个模型的后端使用EF和SQL,并且与Parent和Child表有一对多的关系。在检索数据时,无论我尝试什么,它都不会在使用子ID时正确过滤数据。这是代码:
客户代码:
var query = breeze.EntityQuery.from("Parent")
var predicateChild = new breeze.Predicate('CHILD', 'any', 'CHILD_ID', '==', childId);
query = query.where(predicateChild );
var promise = collectionsManager
.executeQuery(query)
.then(querySuccess)
.catch(queryFailed);
服务器代码:
[HttpGet]
[BreezeQueryable(MaxExpansionDepth = 5)]
public IQueryable<PARENT> Parent()
{
return _contextProvider.Context.PARENT;
}
查询确实有效,它找到了正确的父级(因此似乎正在使用childId),但返回所有子级,而不仅仅是谓词中给出的子级。
我已经尝试了各种方法来获得我想要的结果,但我确信我在服务器代码或EF层中缺少某些东西。
为了使其工作,我更改了服务器代码以使用子表而不是父表。如果在EF中从子节点到父节点设置导航,则可以正常工作,但是在下游后面对数据进行字符串化时会显示循环引用(我需要这样做)。
非常感谢任何帮助。
答案 0 :(得分:0)
您的查询在PARENT
上有一个过滤器。它不会过滤相关的CHILD
实体,这似乎是您问题的意图。
具体而言,您可以查询PARENT
的过滤器,其{strong}至少有一个CHILD
CHILD_ID == childId
。它不会返回任何CHILD
个实体。如果您添加了expand
条款,您将获得PARENT
实体的孩子的全部,而不仅仅是CHILD_ID == childId
的
EF和OData 不支持过滤通过expand
返回的实体。对于那个很抱歉。我希望他们这样做。
这个问题出现了很多。它在许多S.O.中进行了讨论。答案,最近this one。