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