我继承了一个OData服务,除其他外,还公开了一个名为Evaluation的类型。此类型包含许多基本类型属性(int,bool)和两个导航属性/指向其他实体的链接。
Breeze配置为使用v3 /'原创' odata适配器:
breeze.config.initializeAdapterInstance('dataService', 'odata', true);
如果我创建一个新实体
var manager = new breeze.EntityManager('odataEndPointHere');
manager.fetchMetadata().then(() => {
var newEvaluation = manager.createEntity('Evaluation', {Name:'Foo'});
});
然后这个newEvaluation将引用所有原始字段和导航属性(称为验证 - 一个TPH类型 - 和替换 - 一个〜正常~1:1实体关系)。如果我expand()
该关系,我可以查询现有的评估,并会看到预期的验证值。
抓住现有的Validation实例并分配它似乎也可以正常工作:
manager.fetchEntityByKey('Validation', existingIdHere).then(validation => {
newEvaluation.Validation = validation; // works, while assigning a non-entity throws
});
但是,如果我致电manager.saveChanges();
,服务器会报告没有(强制)验证链接。查看$ batch端点的POST,我发现微风实际上只发布了Evaluation类型的子集,只发布了原始字段而没有发布任何导航属性。现有(已获取和已更新)和新(createEntity)对象都会发生这种情况。
现在,我知道我还没有创建一个小测试案例 - 鉴于这是一项我无法直接控制的服务,我仍然在试图弄清楚我将如何去做提供减少的繁殖方法。
那说:
breeze可以查询我的所有实体,就好了。扩展导航属性可以完美地运行
breeze在我saveChanges()
期间完全忽略了相同的属性
(不相关?)breeze无法仅设置FK ID(http://breeze.github.io/doc-js/navigation-properties.html,"直接设置外键")虽然它确实列出了导航属性manager.metadataStore.getEntityType("Evaluation").navigationProperties
编辑:
$元数据结果包含有关实体的内容:
<EntityType>
<!-- snip the rest --->
<NavigationProperty Name="Evaluations" Relationship="MyNamespace.Entities.FK_Evaluation_Validation" ToRole="Evaluation" FromRole="Validation" />
</EntityType>
以后:
<AssociationSet Name="FK_Evaluation_Validation" Association="MyNamespace.Entities.FK_Evaluation_Validation">
<End Role="Validation" EntitySet="Validations" />
<End Role="Evaluation" EntitySet="Evaluations" />
</AssociationSet>