breezejs:向实体类型添加引用约束



这是我上一期的后续问题-这期有点乱,更多地与Telerik数据服务有关。

我从服务器接收的元数据缺少关联节点中的引用约束,尽管我已经在模型上设置了外键属性

因此,我考虑在FetchMetadata的回调中手动将这些约束添加到我的实体中。

这可能吗?有人能提供一个简单的例子来说明如何做到这一点吗?

[EDIT]

到目前为止,我拥有的是:

  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.

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

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

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

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

  4. 修改json以添加引用约束信息。请参阅此处的Breeze原生元数据格式文档

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

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

    希望这是有道理的!

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

    另一种选择是,我们(IdeaBlade)确实为这类工作提供咨询。我们可能会为您编写一个执行步骤1到6的工具。请联系breeze@ideablade.com如果这是感兴趣的,并提到这篇文章。

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

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

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"]
                }
            });

最新更新