REST API 和导航属性的 Breeze URL 生成
Breeze URL generation for REST API and navigation properties
我一直在尝试与第三方一起使用 breeze RESTful API - API 需要两种类型的参数 - 深度链接如 - localhost/request/5 用于单个实体(即请求 ID = 5) 和使用 URL 中编码的 JSON 的参数化查询(由 breeze 毫无问题地转换)。
主要问题是轻而易举地用 URL 创建请求,例如:
localhost/request/{id}
不是JSON编码的GET,而使用breeze查询"withParameters( {workorderid: id})"
问题的第二部分是使用如下语法:
var query = breeze.EntityQuery
.from('request')
.withParameters(parameters)
.expand('requestDetails');
查询两个实体 - 主要 - 请求 - 和次要 - requestDetails(延迟访问查询次要对象的值)。
结果应该像这张图片:
http://postimg.org/image/prurk75ol/
我的模型是用两个实体手动定义的:
metadataStore.addEntityType({
shortName: "request",
namespace: "servicedesk",
dataProperties: {
workorderid: {
dataType: DT.Identity,
isPartOfKey: true
},
ignorerequest: {
dataType: DT.Boolean
}
},
navigationProperties: {
requestDetails: {
entityTypeName: "requestDetails:#servicedesk",
isScalar: true,
associationName: "request_requestDetails",
foreignKeyNames: ["workorderid"]
}
}
});
metadataStore.addEntityType({
shortName: "requestDetails",
namespace: "servicedesk",
dataProperties: {
workorderid: {
dataType: DT.Identity,
isPartOfKey: true
},
group: {
dataType: DT.String
},
description: {
dataType: DT.String
}
},
navigationProperties: {
request: {
entityTypeName: "request:#servicedesk",
isScalar: true,
associationName: "requestDetails_request",
foreignKeyNames: ["workorderid"]
}
}
我找到了这样的例子:https://github.com/Breeze/breeze.js.labs/blob/master/breeze.ajaxrestinterceptor.js,看起来我可以通过拦截 ajax 调用来改变 url 生成,这可以为 angular.breeze 适配器完成吗?
我不太明白你的问题。您遇到什么问题?请编辑您的答案,以便我们提供帮助。
但我确实看到 元数据问题 与您对 request
类型的 requestDetails
导航 属性 的定义有关。 属性 名称和语义都表明此 应该 return 一个集合 但您已将其定义为标量。
requestDetails: {
entityTypeName: "requestDetails:#servicedesk",
isScalar: true, // <-- HUH?
associationName: "request_requestDetails",
foreignKeyNames: ["workorderid"]
}
我想你想要isScalar: false,
我一直在尝试与第三方一起使用 breeze RESTful API - API 需要两种类型的参数 - 深度链接如 - localhost/request/5 用于单个实体(即请求 ID = 5) 和使用 URL 中编码的 JSON 的参数化查询(由 breeze 毫无问题地转换)。
主要问题是轻而易举地用 URL 创建请求,例如: localhost/request/{id}
不是JSON编码的GET,而使用breeze查询"withParameters( {workorderid: id})"
问题的第二部分是使用如下语法:
var query = breeze.EntityQuery
.from('request')
.withParameters(parameters)
.expand('requestDetails');
查询两个实体 - 主要 - 请求 - 和次要 - requestDetails(延迟访问查询次要对象的值)。
结果应该像这张图片:
http://postimg.org/image/prurk75ol/
我的模型是用两个实体手动定义的:
metadataStore.addEntityType({
shortName: "request",
namespace: "servicedesk",
dataProperties: {
workorderid: {
dataType: DT.Identity,
isPartOfKey: true
},
ignorerequest: {
dataType: DT.Boolean
}
},
navigationProperties: {
requestDetails: {
entityTypeName: "requestDetails:#servicedesk",
isScalar: true,
associationName: "request_requestDetails",
foreignKeyNames: ["workorderid"]
}
}
});
metadataStore.addEntityType({
shortName: "requestDetails",
namespace: "servicedesk",
dataProperties: {
workorderid: {
dataType: DT.Identity,
isPartOfKey: true
},
group: {
dataType: DT.String
},
description: {
dataType: DT.String
}
},
navigationProperties: {
request: {
entityTypeName: "request:#servicedesk",
isScalar: true,
associationName: "requestDetails_request",
foreignKeyNames: ["workorderid"]
}
}
我找到了这样的例子:https://github.com/Breeze/breeze.js.labs/blob/master/breeze.ajaxrestinterceptor.js,看起来我可以通过拦截 ajax 调用来改变 url 生成,这可以为 angular.breeze 适配器完成吗?
我不太明白你的问题。您遇到什么问题?请编辑您的答案,以便我们提供帮助。
但我确实看到 元数据问题 与您对 request
类型的 requestDetails
导航 属性 的定义有关。 属性 名称和语义都表明此 应该 return 一个集合 但您已将其定义为标量。
requestDetails: {
entityTypeName: "requestDetails:#servicedesk",
isScalar: true, // <-- HUH?
associationName: "request_requestDetails",
foreignKeyNames: ["workorderid"]
}
我想你想要isScalar: false,