Breeze如何针对本地缓存编写与实体相关的查询

Breeze如何针对本地缓存编写与实体相关的查询,breeze,Breeze,我试图弄清楚如何编写一个查询,该查询将使用ExecuteQueryLocal过滤我的相关实体 以下是我的例子: var queryStageConfigs = breeze.EntityQuery .from("Stages") .where("StageConfig.ConfigValue", '==', 'Green') .expand("StageConfig"); var stageConfigs = self.manager.ex

我试图弄清楚如何编写一个查询,该查询将使用ExecuteQueryLocal过滤我的相关实体

以下是我的例子:

   var queryStageConfigs = breeze.EntityQuery
       .from("Stages")
       .where("StageConfig.ConfigValue", '==', 'Green')
       .expand("StageConfig");

   var stageConfigs = self.manager.executeQueryLocally(queryStageConfigs);
这是我返回的错误:

错误:在entityType:Stages上找不到属性:ConfigValue:

元数据存储

    //Stages Entity
    metadataStore.addEntityType({
        shortName: "Stages",
        //namespace: "MonitoringCenter",
        dataProperties: {
            id:             { dataType: DT.Int64, isPartOfKey: true },
            institutionId:  { dataType: DT.Int64 },
            qualifiedName:  { dataType: DT.String },
            displayName:    { dataType: DT.String },
            displayOrder:   { dataType: DT.Int64 },
        },
        navigationProperties: {
            institution: {
                entityTypeName: "Stages",
                isScalar: true,
                associationName: "Institution_Stages",
                foreignKeyNames: ["institutionId"]
            },
            stageConfig: {
                entityTypeName: "StageConfig",
                isScalar: false,
                associationName: "Stages_StageConfig"
            }
        }
    });
    metadataStore.setEntityTypeForResourceName("Stages", "Stages");

    //StageConfig Entity
    metadataStore.addEntityType({
        shortName: "StageConfig",
        //namespace: "MonitoringCenter",
        dataProperties: {
            id:             { dataType: DT.Int64, isPartOfKey: true },
            stageId:        { dataType: DT.Int64 },
            configName:     { dataType: DT.String },
            configValue:    { dataType: DT.String },
        },
        navigationProperties: {
            stages: {
                entityTypeName: "StageConfig",
                isScalar: true,
                associationName: "Stages_StageConfig",
                foreignKeyNames: ["stageId"]
            }
        }
    });
    metadataStore.setEntityTypeForResourceName("StageConfig", "StageConfig");
我正在手工编写JsonResultsAdpater,以便将JSON数据放入使用元数据存储创建的实体中,从而建立实体之间的关系

当我查询Stages实体时,我可以看到StageConfigs数组,它不是空的

有关于我做错了什么的线索吗


任何帮助都将不胜感激

好吧,你的例子有点让人困惑,因为我无法根据你的名字来判断关系的基数。一般来说,我认为像“stages”这样的复数名称是“Stage”实体的集合,即isScalar=false。但是在您的例子中,“stages”属性实际上是标量的,而它的逆属性“stageConfig”属性,一个奇异的名称,实际上是非标量的。如果此假设是正确的,那么查询将无法工作的原因是stage.stageConfig属性必须是标量才能工作,除非您希望使用“any/all”运算符。i、 例如

var queryStageConfigs = breeze.EntityQuery
   .from("Stages")
   .where("StageConfig", "any", "ConfigValue",  "==", 'Green');
   .expand("StageConfig");
查询不应该被称为“queryStages”吗,因为您正在查询并返回“stages”

此外,只是一个nit,但最好保持所有entityType名称为单数,资源名称为复数。这不是一个要求,但它肯定会混淆一个entityType单一化阶段图和另一个多重化阶段的方式


我在代码中没有看到任何关于使用camelCase命名约定的内容,但是这个示例似乎表明您假设已经设置了该命名约定

你好,谢谢你的回复。我将试着澄清一下,我有两个实体,一个叫做Stages,应该与StageConfig相关,基于Stages实体中的id和StageConfig实体中的stageId。这似乎是正确的,因为当我查看Javascript中的对象时,我在Stages对象下得到了一个StageConfig数组。我真正想问的是如何编写基于实体关系的实体查询。正如我在上面尝试的那样。请记住,我试图使用ExecuteQueryLocal查询本地实体!旁注-我还在Pluralsight代码露营器中尝试了以下操作,但遇到了相同的问题:函数getSpeakersLocal{var query=EntityQuery.fromPerson.wherespeakerSessions.speakerId,'=',15;var speakers=manager.executeQueryLocallyquery;返回speakers;//var orderBy='firstName,lastName';//var predicate=predicate.create'isSpeaker','=',true;//返回_getAllLocalentityNames.speaker、orderBy、predicate;}