BreezeJS按子/扩展(1:多)表过滤

时间:2015-01-26 13:53:01

标签: entity-framework breeze parent-child

我正在和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中从子节点到父节点设置导航,则可以正常工作,但是在下游后面对数据进行字符串化时会显示循环引用(我需要这样做)。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的查询在PARENT上有一个过滤器。它不会过滤相关的CHILD实体,这似乎是您问题的意图。

具体而言,您可以查询PARENT的过滤器,其{strong}至少有一个CHILD CHILD_ID == childId。它不会返回任何CHILD个实体。如果您添加了expand条款,您将获得PARENT实体的孩子的全部,而不仅仅是CHILD_ID == childId

EF和OData 支持过滤通过expand返回的实体。对于那个很抱歉。我希望他们这样做。

这个问题出现了很多。它在许多S.O.中进行了讨论。答案,最近this one