这是我上一期的后续问题-这个问题有点混乱,并且与Telerik数据服务有关。
尽管我已经在模型上设置了外键属性,但是我从服务器接收的元数据缺少关联节点中的引用约束。
因此,我正在考虑在FetchMetadata的回调中将这些约束手动添加到我的实体中。
那有可能吗?有人可以提供一个简单的例子来说明如何做到这一点吗?
[编辑]
这是我到目前为止的内容:
manager.fetchMetadata().then(function () {
var mandatType = manager.metadataStore.getEntityType("Mandate");
mandatType.autogeneratedKeyType = breeze.AutoGeneratedKeyType.Identity;
var openPositionsProp = new breeze.NavigationProperty({
name: "OpenPositions",
entityTypeName: "OpenPositions:#DirectDebitModel",
isScalar: true,
associationName: "OpenPosition_Mandate_Mandate_OpenPositions",
foreignKeyNames: ["Id"]
});
mandatType.addProperty(openPositionsProp);
});
但这引发了一个例外:
The 'Mandate:#DirectDebitModel' EntityType has already been added to a MetadataStore and therefore no additional properties may be added to it.
好的,我有一种可能的方法,您现在可以使用。
像现在一样,从Teleriks OData提要中获取元数据。
通过MetadataStore.exportMetadata方法导出作为上一步结果创建的metastore。这将以Breeze的本机格式为相同的元数据返回“字符串化”的json。这种格式更容易使用。
通过JSON.parse将此字符串转换为json 。
修改json以添加引用约束信息。请参阅此处的Breeze本机元数据格式文档
创建一个新的MetadataStore并将修改后的json导入其中。
使用此MetadataStore创建一个新的EntityManager并使用它。现在,该EntityManager应该具有完整的Breeze元数据,以便与提要的其余部分一起使用。
希望这是有道理的!
我们计划在下一个版本中发布一种形式的混合元数据。不幸的是,它没有涵盖您的情况,因为我们关注的是如何将自定义元数据添加到现有的metastore中,而不是实际编辑/修改现有的元数据。
另一个选择是,我们(IdeaBlade)确实为此类工作提供咨询。我们可能会编写一个为您执行第1步到第6步的工具。如果对此有兴趣,请联系[email protected]并提及此帖子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句