Breeze未从navigationProperties填充实体
我有客户端定义的元数据,如下所示:Breeze未从navigationProperties填充实体,breeze,Breeze,我有客户端定义的元数据,如下所示: helper.addTypeToStore(manager.metadataStore, { name: 'PriorStudy', dataProperties: { priorStudyId: { type: breeze.DataType.Int32 }, priorStudyType: { max: 6 }, priorStudyPurpose: { max: 12 }, notes: { max: 250 }
helper.addTypeToStore(manager.metadataStore, {
name: 'PriorStudy',
dataProperties: {
priorStudyId: { type: breeze.DataType.Int32 },
priorStudyType: { max: 6 },
priorStudyPurpose: { max: 12 },
notes: { max: 250 }
}
});
helper.addTypeToStore(manager.metadataStore, {
name: 'Patient',
dataProperties: {
patientId: { type: breeze.DataType.Int32 },
firstName: { max: 25 },
lastName: { max: 25 },
},
navigationProperties: {
priorStudies: { entityTypeName: 'PriorStudy', fk: ['patientId'], hasMany: true}
}
})
来自服务器的JSON响应的形状如下:
{ FirstName: "Steve",
LastName: "Holt",
PatientId: 1,
PriorStudy: [
{
PriorStudyId: 1,
PriorStudyType: "BLAH",
PriorStudyPurpose: "Whatever",
PatientId: 1,
Notes: "la la la"
}
]
}
我正在测试实体的创建,如下所示:
var query = breeze.EntityQuery.from('Patient/1').toType('Patient')
console.log(query);
manager.executeQuery(query).then(function (results) {
console.log(results);
})
.then(function () {
var ents = breeze.EntityQuery.from('PriorStudy').using(manager).executeLocally();
console.log(ents);
});
患者实体按预期创建,但无论我尝试什么,PriorStudy实体都为空。我打算写一个JsonResultsAdapter
我知道这听起来很像其他的问题,但我已经用了两天的时间来思考这个问题,不知道还有什么好尝试的。任何建议都将不胜感激
编辑:链接到非工作代码
您在这里遗漏了一些东西 1-您正在错误地重新定义客户端元数据。“PriorStudy”实体类型的正确定义如下所示
name: 'PriorStudy',
dataProperties: {
priorStudyId: { type: breeze.DataType.Int32 },
patientId: { type: breeze.DataType.Int32 },
priorStudyType: { max: 6 },
priorStudyPurpose: { max: 12 },
notes: { max: 250 }
},
navigationProperties: {
patient: 'Patient',
}
请注意“patientId”外键以及“patient”标量导航属性
然后“患者”实体类型的定义可以如下所示
name: 'Patient',
dataProperties: {
patientId: { type: breeze.DataType.Int32 },
firstName: { max: 25 },
lastName: { max: 25 },
},
navigationProperties: {
priorStudies: { entityTypeName: 'PriorStudy', hasMany: true }
}
请注意,您没有在“患者”实体类型上指定“priorStudies fk”属性
2-正确定义元数据后,在查询中,您可以使用“扩展”方法查询患者,同时从数据库中获取“优先研究”
var query=breeze.EntityQuery.from'Patient/1'
.键入“患者”
.扩大“优先研究”
编辑1:
添加
编辑2:
除了定义和修复客户端元数据外,还必须编写自己的自定义JsonResultsAdapter。在页面上查找Edmunds和ESPN示例。本教程也可能有帮助
我创建了一个示例来说明如何编写自定义jsonResultsAdapter。查找createJsonResultsAdapter方法
希望这有帮助。谢谢!现在,尝试加载数据时出现错误:TypeError:undefined不是UpdateRateDentityInCollection的函数http://localhost:1337/js/lib/breeze.debug.js:14542:40 在调试器中,relatedEntity似乎是一个原始对象,因此缺少getProperty方法,而不是包装为实体。有什么想法吗?除非我看到一些代码,否则很难说。我添加了我的plunkr链接来演示这应该如何工作。也许你可以看到并比较你所做的不同。抱歉,回复时间太长了。不得不做其他事情。因此,我注意到在第108-110行的Plunkr示例中,您明确地执行了我试图隐式实现的操作:创建PriorStudy实体并将其添加到Patient实体。明确地说:我正在从服务器获取JSON格式的整个对象图,并试图让breeze将整个内容解析到实体存储中。非常感谢你的帮助。我已经用我的无效代码添加了一个到原始帖子的链接。这看起来很糟糕,但只是我试图教自己微风是如何工作的。对不起。我完全没有注意到您在原始帖子中无法控制服务器的json响应。你说得对。除了定义和修复客户端元数据外,还必须编写自己的自定义JsonResultsAdapter。在电视上查找Edmunds和ESPN的样本。这个链接可能也会有帮助。与此同时,我将努力更新我的帖子,以显示更完整的答案。