【问题标题】:Breeze 1-To-Many Unidirectional Navigation Property not Populated未填充 Breeze 一对多单向导航属性
【发布时间】:2015-05-05 14:46:54
【问题描述】:

微风版本:1.5.3

我在 SO 上遇到了一些与旧问题类似的问题,但似乎这个“错误”正在再次发生:

我有一个未填充的一对多单向导航属性。我已经检查了元数据和服务器的响应。我什至调试到微风中,节点(或 rawEntity)似乎很完美。

我试图追踪它并得出结论,它发生了,因为没有为我的导航属性找到“反向”属性,并且在没有更新目标实体的情况下返回了 mergeRelatedEntities-Function:

function mergeRelatedEntities(mc, navigationProperty, targetEntity, rawEntity) {
    var relatedEntities = mergeRelatedEntitiesCore(mc, rawEntity, navigationProperty);
    if (relatedEntities == null) return;

    var inverseProperty = navigationProperty.inverse;
    if (!inverseProperty) return;

    var originalRelatedEntities = targetEntity.getProperty(navigationProperty.name);
    originalRelatedEntities.wasLoaded = true;

    relatedEntities.forEach(function (relatedEntity) {
        if (typeof relatedEntity === 'function') {
            mc.deferredFns.push(function () {
                relatedEntity = relatedEntity();
                updateRelatedEntityInCollection(relatedEntity, originalRelatedEntities, targetEntity, inverseProperty);
            });
        } else {
            updateRelatedEntityInCollection(relatedEntity, originalRelatedEntities, targetEntity, inverseProperty);
        }
    });
}

旧帖:

Non scalar navigation properties are not populating with "nodb" conception

Breeze (1.4.5) unidirectional one-to-many: navigation collection not populated

2015 年 5 月 11 日编辑

好的,我开始理解 Ward 对未映射属性的含义(通过查找 2 年前的类似问题:Handling calculated properties with breezejs and web api

到目前为止我所拥有的:

function iUIConfigConstructorTool() {
    this.ConfigToCurrentUSetting = null;
};
function iUIConfigConstructorAppl() {
    this.ConfigToCurrentUSetting = null;
};
function iUIConfigConstructorWidget() {
    this.ConfigToCurrentUSetting = null;
};
function iUIConfigInitializer(uiConfigObject) {
    // initializing other properties
};
this.manager.metadataStore.registerEntityTypeCtor("Tool", iUIConfigConstructorTool, iUIConfigInitializer);
this.manager.metadataStore.registerEntityTypeCtor("Appl", iUIConfigConstructorAppl, iUIConfigInitializer);
this.manager.metadataStore.registerEntityTypeCtor("Widget", iUIConfigConstructorWidget, iUIConfigInitializer);

这就是我想要的。有没有办法通过服务器的元模型做到这一点?因为我在服务器上定义了我的计算属性并且元模型是由服务器提供的,所以如果我添加一个新的 Navigation-Property,我不想更改客户端实现。所以我需要元模型中的标志之类的东西来告诉微风,这个属性需要被填充,因为它在没有 ForeignKeys 等的情况下通过电线。

也许换句话说:我们在服务器端对每个查询的对象进行“子查询”(例如,查找带有订单的客户,但仅限于特定日期)并将其交付给轻而易举(在与客户的实际订单属性不同的属性中)。我们的问题是:我们如何解包这个子查询,因为元数据中没有直接连接,但我们需要逻辑连接。

【问题讨论】:

    标签: breeze


    【解决方案1】:

    请更新您的问题:

    • 您如何获取/创建元数据

    • 两个端点的元数据(只有 nav props、pk props 和 fk props 可以)

    • 确切的查询表达式

    当然,plunker 中的 repro 将是最受欢迎的。

    2015 年 5 月 7 日更新

    如果我正确理解您的评论,相关导航属性(属性)将由您维护(带有服务器提供的信息),而不是由 Breeze。

    这导致我建议您将它们维护为 未映射 属性,而不是映射的导航属性。这有意义吗?

    【讨论】:

    • 感谢您的评论,我再次仔细阅读了“手动元数据(深入)”。我缺少“invForeignKeyNames”(我自己创建元数据)。问题是:它是服务器计算的关联,实体不是“真正”相互连接的。它返回另一个名为“UserSettings”的导航属性中的许多 UserSettings 中的一个 UserSetting(当前)。它由 QueryHelper (PostExecuteQuery) 填充。所以我的实体有两个导航。属性:“用户设置”和“当前用户设置”。
    • 这是有道理的。该属性由服务器维护(我们称它们为计算属性)并附加在 PostExecuteQuery 中。此属性还包含可以合并到缓存管理器中并具有真实导航属性的真实实体。这就是为什么我希望微风像对待任何其他实体一样对待他们。只有通过计算属性的连接是“特殊的”,并且仅由服务器在查询执行时进行。那么如何将元模型中的导航属性标记为“未映射”?我认为这是一个客户端功能...
    • 我刚刚用新的见解编辑了我的问题。让你的 cmets 在上面会很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多