如何/何时在Breeze中查询“扩展”实体

时间:2013-04-24 19:18:09

标签: asp.net-mvc knockout.js breeze single-page-application

我有一个ViewModel,用于加载'子'实体,我还希望根据每个加载的子项显示'孙子'实体。为简化起见,我需要帮助确定如何查询这些对象并在浏览器中的正确“树”下显示它们(对于我的编码语言屠宰道歉:))

我正在使用Knockout绑定数据并使用Breeze加载实体。此问题是When to add extend additional complex types onto a Breeze entity

的扩展

另外 - 我的模型首先是EF代码,我有一个配置定义了孩子和孙子之间的一对多关系,我认为 Breeze已经知道了这一点,但我想弄清楚如何利用这个。

childs.js(查看模型)

var childs = ko.observableArray();
var grandChilds = ko.observableArray();
var parentId = ko.observable();

function refresh() {
    var parentId = (parent).parentId;  // << for ex. don't worry about this line : )
    return Q.all([getChildren(), getGrandChildren()]);
}

function getChildren() {
    return datacontext.getChildren(childs, parentId);
}

function getGrandChildren() {
    return datacontext.getGrandChildren(grandChilds);
}

并在视图中(childs.html)

<div data-bind="foreach: childs">
    <div title="Go to Child Details">
        <div><strong data-bind="text: name"></strong></div>
        <div><strong data-bind="text: gender().description"></strong></div>
    </div>
    <div>
        <!-- ko.compose { view: grandChilds} --><!--/ko-->
    </div>
</div>

我目前的datacontext供参考

    var getChilds= function (childsObservable, parentId) {

        var query = EntityQuery.from('Childs')
            .where('parentId', '==', parentId)
            .expand('grandChildren')
            .orderBy('id');

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            if (childsObservable) {
                childsObservable(data.results);
            }
            logger.log('Retrieved [Childs] and [Grandchilds] from remote data source', data, system.getModuleId(datacontext), true);
        }
    };

我想只加载孩子们的孙子孙女,因为我有很多孩子,我只想在正确的孩子下面展示孙子孙女,而不是所有的孩子都在一个列表中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您有三种基本方法可以查询和“链接”相关实体。

1)使用 EntityQuery.expand

2)使用 EntityAspect.loadNavigationProperty

3)创建一个“广泛的”EntityQuery,恰好包含整个图形,所有父/子关系将自动链接。