非标准1:BreezeJS中的许多关系

时间:2014-03-21 13:40:55

标签: breeze

我有2个Breeze实体,我正在使用它们在相关的UI页面中使用但我无法弄清楚如何在元数据中定义关系。目前我在代码中将它们粘合在一起,但我确信必须有更轻松的方式来实现它。

这是我的实体的(缩短的)元数据:

{
  "namespace": "Mynamespace",
  "shortName": "SalesInvoice",
  "defaultResourceName": "SalesInvoices",
  "dataProperties": [
    {
      "name": "ID",
      "dataType": "Int32",
      "isPartOfKey": true,
      "isNullable": false,
      "validators": [
        {
          "name": "required"
        },
        {
          "name": "integer"
        }
      ]
    },
    {
      "name": "InvoiceNumber",
      "dataType": "String",
      "isPartOfKey": false,
      "isNullable": true,
      "validators": [
        {
          "name": "textMedium"
        }
      ]
    }
  ],
  "key": {
    "propertyRef": {
      "name": "ID"
    }
  },
  "autoGeneratedKeyType": "Identity"
},
{
  "namespace": "Mynamespace",
  "shortName": "DocUrl",
  "defaultResourceName": "DocUrls",
  "dataProperties": [
    {
      "name": "ID",
      "dataType": "Int32",
      "isPartOfKey": true,
      "isNullable": false,
      "validators": [
        {
          "name": "required"
        },
        {
          "name": "integer"
        }
      ]
    },
    {
      "name": "Title",
      "dataType": "String",
      "isPartOfKey": false,
      "isNullable": true,
      "validators": [
        {
          "name": "required"
        },
        {
          "name": "textMedium"
        }
      ]
    },
    {
      "name": "Url",
      "dataType": "String",
      "isPartOfKey": false,
      "isNullable": false,
      "validators": [
        {
          "name": "required"
        },
        {
          "name": "url"
        }
      ]
    },
    {
      "name": "Parent",
      "dataType": "String",
      "isPartOfKey": false,
      "isNullable": false,
      "validators": [
        {
          "name": "required"
        },
        {
          "name": "textMedium"
        }
      ]
    },
    {
      "name": "ParentKey",
      "dataType": "Int32",
      "isPartOfKey": false,
      "isNullable": false,
      "validators": [
        {
          "name": "required"
        },
        {
          "name": "integer"
        }
      ]
    }
  ],
  "key": {
    "propertyRef": {
      "name": "ID"
    }
  },
  "autoGeneratedKeyType": "Identity"
}

在SalesInvoice UI页面中,用户必须能够向GoogleDrive文档添加任意数量的超链接,这些文档存储在DocUrl实体中。通常我会定义一个SalesInvoiceDocument实体,并使用SalesInvoice上的导航属性以标准方式设置1:many关系。现在这是呀!添加超链接的想法也是我需要为许多其他实体做的事情。这将导致创建更多实体来存储超链接(例如ProductDocument,CustomerDocument,TransactionDocument等),尽管这些字段始终与DocLink实体相同。

为了避免这种重复(并防止全局搜索文档),我已经使用Parent和ParentKey字段定义了单个DocUrl实体。在这种情况下,对于新的DocUrl实体,我将Parent字段设置为'SalesInvoice'(或任何唯一的字符串以定义返回SalesInvoices的关系),将ParentKey设置为SalesInvoice的ID值。

当我加载SalesInvoice实体时,我加载它的DocUrl实体,其谓词匹配Parent ='SalesInvoice'和ParentKey = SalesInvoice.ID

这对我来说看起来像复合键,但我还没有在Breeze中使用它们。如果我可以在导航属性定义中定义Parent ='SalesInvoice'位,我认为这样可以解决问题,但又不确定如何。

所以问题是......有更好的方法吗?

需要注意的重点:我的服务器后端是自定义PHP代码,因此我不使用任何.NET环境。

谢谢!

0 个答案:

没有答案