【问题标题】:breeze metadata when multiple types has/share the same short name当多种类型具有/共享相同的短名称时,微风元数据
【发布时间】:2014-07-30 03:09:19
【问题描述】:

我从http://www.breezejs.com/documentation/load-metadata-script 之后的数据库生成元数据 我的问题是:如何为数据库中具有相同名称但不同 shema 的两个实体生成元数据?

我尝试为我的实体使用限定名称,如下所示:...

"entityType": [
      {
        "name": "Admin.RefactorColumn",
        "key": {
          "propertyRef": {
            "name": "Id"
          }
        },
        "property": [
          {
            "name": "Id",
            "type": "Edm.Int32",
            "nullable": "false",
            "annotation:StoreGeneratedPattern": "Identity"
          }, ...

... 问题是,当我制作 entityManager.saveChanges() 并从服务器微风中返回 saveResult(也是手工制作的)时,寻找名称为 RefactorColumn:#Admin ... 而不是 Admin.RefactorColumn:#...

如果名称只是“RefactorColumn”而不是“Admin.RefactorColumn”,我没有问题

我可以通过更改元数据格式或 saveResult 格式来解决这个问题吗?

感谢您的帮助!

【问题讨论】:

    标签: metadata breeze


    【解决方案1】:

    所有微风实体类型都有一个命名空间限定名称的概念。这个名字是一个“shortName”和一个“namespace”的组合。从微风 1.4.16 开始,可以通过调用 EntityType.qualifyTypeName 静态函数来创建限定名称。即

     var shortName = "Employee";
     var namespace = "My.Qualified.Namespace";
     var qualifiedName = breeze.EntityType.qualifyTypeName(shortName, namespace);
     // qualifiedTypeName will be => "Employee:#My.Qualified.Namespace"
    

    一般来说,所有微风 API 都将接受短名称或限定名称。如果提供了短名称,那么微风将通过在本地元数据存储中找到第一个具有匹配短名称的限定名称,在内部将其转换为限定名称。

    每种实体类型的 Breeze 元数据既可以从服务器检索,也可以在客户端定义。如果在客户端上定义你的 entityType 将被定义为:

    myMetadataStore.addEntityType({
            shortName: "RefactorColumn",
            namespace: "Admin",
            autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
            dataProperties: {
                id: { dataType: DataType.Int32, isPartOfKey: true, isNullable: false },
                // additional properties here:
            },
    });
    

    breeze.js.samples GitHub 存储库中的 DocCode 示例中有几个这种技术的示例。

    或者,如果您通过从服务器返回 json 来定义元数据,您有两个选择,您可以返回有效的 OData 元数据定义(这似乎是您在上面尝试返回的内容),或者您可以使用微风的本机元数据格式,这要简单得多。查看它的样子的最简单方法是在客户端上创建元数据,如上所示并调用

    var exportedMetadata = myMetadataStore.exportMetadata();
    

    exportedMetadata 的内容将采用“本机”微风元数据格式,基本上只是内部 entityType 定义的 json 化版本。

    【讨论】:

    • 感谢您的回答!我导出了元数据,然后以相同的格式生成。现在适用于具有相同实体名称的多个命名空间。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多