我有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环境。
谢谢!