1

我想从数据库中加载一个实体,然后使用它的 ICollection(来自模型类)加载一些子数据。如果它是一对多的关系,那么从单个视图模型中可以很简单地做到这一点,但我有一个更复杂的结构 -

父母有很多孩子。每个孩子都有许多孙辈,需要将其与正确的孩子联系起来。层次结构需要保持完整。

到目前为止我提出的其他选项可能不是最好的方法,所以我的问题是 - 加载孙子的最佳做法是什么 - 或其他方法?

在配置元数据存储时在构造函数中 -

function configureMetadataStore(metadataStore) {
    metadataStore.registerEntityTypeCtor(
        'Child', null, childInitializer);
}

function childInitializer(child) {
    child.grandchildren = (Do something here)
        return grandchildren;
    });
}

在填充儿童的视图模型中 -

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

var addGrandChildren = function () {
    $.each(childs, function (i) {
        var grandChildren = ko.observableArray();
        var childId = $(this).data(id);
        datacontext.getGrandChildren(grandChildren, childId);
    });
    return;
};

还是别的什么方法?

4

2 回答 2

1

如果您的关系不是单向的,Breeze 实体会在您查询它们时自动将它们自己连接在一起。(编辑:从 v 1.3.5 开始,微风也将连接单向关系。)

这意味着,如果您使用查询来提取恰好相关的 n 个实体,所有这些实体将自动以正确的方式相互链接。如果您使用 EntityQuery.expand 方法,也会发生同样的情况。因此,您的问题只是如何以最少的调用次数查询您想要的图表的任何部分。

注意:如果您真的想真正“走”图表,您还应该查看 EntityAspect.loadNavigationProperty 方法。但是,如果您正在处理大型图表,这可能会表现不佳。

于 2013-04-24T18:43:00.837 回答
0

我对 Breezejs (1.4.2) q (0.9.7) 有同样的问题我想为实体添加一个计算属性。

var doctorInitializer = function (doctor) {
    doctor.FullName = ko.computed(function () {           
        return doctor.FirstName() + " " + doctor.MiddleName() + " " + doctor.LastName() + " " + doctor.SurName();           
    });
};

var doctorName = '/breeze/polyclinic', 
doctorManager = new breeze.EntityManager(doctorName);
var store = doctorManager.metadataStore;
store.registerEntityTypeCtor("Doctor", null, doctorInitializer);

我尝试将计算出的淘汰赛添加到构造函数

var doctor = function () {
  self.FullName = ko.computed( {
    read: function() {
       return self.FirstName + " " + self.MiddleName + " " + self.LastName + " " + self.SurName;
    },
    deferEvaluation: true
  });
};
store.registerEntityTypeCtor("Doctor", doctorInitializer);

在这两种情况下,只有当我删除括号但 MiddleName 和 SurName 不是必需的并且我得到空字符串而不是空字符串时才有效

这是我遇到的错误http://screencast.com/t/bP9Xnmf9Jm

于 2013-09-28T01:43:25.013 回答