2013-04-24 46 views
0

我有一个加载“子”实体的ViewModel,我还想根据加载的每个子代显示'孙'实体。为了简化事情,我需要帮助确定如何查询这些对象,并在浏览器中正确的“树”下显示它们(对于编码语言的屠宰非常抱歉))如何/何时在Breeze中查询'扩展'实体

我正在使用Knockout绑定数据并加载与微风的实体。这个问题的When to add extend additional complex types onto a Breeze entity

而且扩展 - 我的型号是EF代码第一,我有界定的孩子和孙子之间的一对多关系的配置,我认为微风已经知道了,但我想图了解如何利用这一点。

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); 
     } 
    }; 

我想只装载孩子的孙辈,并且因为有很多孩子我只想在c下展示孙辈直立的孩子,并不是所有的孙子都在一个列表中。任何帮助,将不胜感激。

+0

作为一个说明杰留给我一个关于我的另一个问题的笔记,看看EntityQuery.expand方法,我现在重新阅读它,我很确定答案在这里,我应该在开启一个新的问题之前研究这个,但随时让我觉得自己很愚蠢,因为不这样做:) – 2013-04-24 19:24:01

回答

1

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

1)使用EntityQuery.expand

2)使用EntityAspect.loadNavigationProperty

3)创建一个 “宽” EntityQuery即恰好包围整个图表和所有的父/儿童关系将自动关联。

+0

谢谢杰伊我忘了所有关于扩展方法。我能够轻松加载所有实体并正确匹配它们。这是“你不知道你不知道什么”的东西之一,Breeze使它变得如此简单,有时我们寻找过时的方法来解决简单的问题。 – 2013-04-24 19:42:30