0

这是我上一期的后续问题- 这个问题有点混乱,与 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.

4

2 回答 2

1

因此,您正在获取元数据,但实体之间没有关系。嗯,我没有得到元数据并试图创建相关的其他模型属性。

最好的办法是在构造函数上添加一个导航类型的属性。

http://www.breezejs.com/sites/all/apidocs/classes/EntityType.html#method_addProperty

如果是我,我会在构造函数中以这种方式(或类似的方式)尝试 -

myEntity.addProperty({
                associatedEntity: {
                    entityTypeName: "AssociatedEntity", isScalar: true,
                    associationName: "AssociatedEntity_MyEntitys", foreignKeyNames: ["associatedEntityId"]
                }
            });

其中 myEntity 是当前实体的名称,AssociatedEntity 将是您的导航属性, associatedEntityId 是 myEntity 的一个属性,它引用另一个实体。当然,要使这是一种双向关系,您还需要向 AssociatedEntity 添加一个属性。

associatedEntity.addProperty({
                myEntitys: {
                    entityTypeName: "MyEntity", isScalar: true,
                    associationName: "AssociatedEntity_MyEntitys", foreignKeyNames: ["myEntityId"]
                }
            });
于 2013-09-05T13:04:24.070 回答
1

好的,我有一个您现在可以使用的方法。

  1. 就像现在一样,从 Teleriks OData 提要中获取元数据。

  2. 通过MetadataStore.exportMetadata方法导出上一步创建的 metadataStore 。这将为 Breeze 原生格式的相同元数据返回“字符串化”json。这种格式更容易使用。

  3. 通过JSON.parse将此字符串转换为 json 。

  4. 修改json添加引用约束信息。在此处查看微风原生元数据格式文档

  5. 创建一个新的 MetadataStore 并将修改后的 json 导入其中。

  6. 使用此 MetadataStore 创建一个新的 EntityManager 并使用它。此 EntityManager 现在应该具有完整的 Breeze 元数据,以便与提要的其余部分一起使用。

    希望这是有道理的!

    我们计划在下一个版本中发布一种混合元数据。不幸的是,它没有涵盖您的情况,因为我们专注于如何将自定义元数据添加到现有的 metadataStore,而不是实际编辑/修改现有的元数据。

    另一种选择是我们(IdeaBlade)确实为此类工作提供咨询。我们可能会编写一个工具来为您执行步骤 1 到 6。如果对此感兴趣,请联系微风@ideablade.com 并提及此帖子。

于 2013-09-27T16:09:52.050 回答