我试图弄清楚如何编写一个使用executeQueryLocally过滤我的相关实体的查询。
以下是我的例子:
var queryStageConfigs = breeze.EntityQuery
.from("Stages")
.where("StageConfig.ConfigValue", '==', 'Green')
.expand("StageConfig");
var stageConfigs = self.manager.executeQueryLocally(queryStageConfigs);
这是我回来的错误:
错误:无法找到属性:entityType上的ConfigValue:阶段:#
MetadataStore
//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数据放入使用metadataStore创建的实体中设置实体之间的关系。
当我查询Stages实体时,我可以看到StageConfigs数组并且它不是空的。
有关我可能做错的任何线索?
非常感谢任何帮助!
答案 0 :(得分:0)
好的,你的例子有点令人困惑,因为我无法根据你的名字来判断关系的基数。一般来说,我认为像'stage'这样的复数名称是'Stage'实体的集合(即isScalar = false)。但在你的情况下,'阶段'属性实际上是标量和它的反转,'stageConfig'属性,一个单一化的名称,实际上是非标量。如果这个假设是正确的,那么你的查询将无法工作的原因是因为stage.stageConfig属性需要是一个标量才能使查询正常工作,除非你想使用'any / all'运算符。即
之类的东西var queryStageConfigs = breeze.EntityQuery
.from("Stages")
.where("StageConfig", "any", "ConfigValue", "==", 'Green');
.expand("StageConfig");
(并且不应该将查询称为'queryStages',因为您正在查询并返回'阶段')
另外,这只是一个不错的选择,但是将所有的entityType名称保持为单数并且您的资源名称保持复数可能是一个好主意。这不是一个要求,但它肯定会混淆你有一个entityType singularized(StageConfig)和另一个复数(阶段)的方式。
我在代码中没有看到有关使用camelCase命名约定的任何提及,但该示例似乎表明您假设已设置此值。