【发布时间】:2013-05-16 16:24:00
【问题描述】:
我的目标是在我的 OData 服务器上保持两个微风实体之间的简单关系。
我已经设置了一个服务器,我可以:
- 插入数据
- 查询数据
- 在客户端的两个实体之间创建关系
- 但是无法在服务器端保持关系。
关于我缺少什么的任何想法?
以下是我的设置详情
- 我正在使用在 Node.js(virtualBox、ubuntu 12.04、node.js、MongoDB)上运行 JayData 的 OData/MongoDB 后端
- 我创建了一个简单的数据模型,其中包含一个基于this stack overflow question 的用户和个人实体。这是 JayData 数据模型定义
>
$data.Class.define("$org.Types.user", $data.Entity, null, {
Id: {type: "id", key: true, computed: true, nullable: false },
Person: { type: "$org.Types.person", inverseProperty: "User", required:true },
EmailAddress: { type: "string"},
Password: { type: "string"}
}, null)
$data.Class.define("$org.Types.person", $data.Entity, null, {
Id: {type: "id", key: true, computed: true, nullable: false },
User: { type: "$org.Types.user", inverseProperty: "Person"},
FirstName: { type: "string"},
LastName: { type: "string"}
}, null);
$data.Class.defineEx("$org.Types.Context", [$data.EntityContext, $data.ServiceBase], null, {
User: {type: $data.EntitySet, elementType: $org.Types.user } ,
Person: {type: $data.EntitySet, elementType: $org.Types.person }
});
exports = $org.Types.Context;
- 我可以使用 Breeze.js 查询数据
- 我可以使用 Breeze.js 插入 User 和 Person 实体
- 我可以在 Breeze 中设置关系,并且可以看到实体的变化
- 我已将 Breeze.js 更新到 1.3.3
>
var manager = new breeze.EntityManager('api/');
// other breeze initialization stuff, metadata etc.
var person = manager.createEntity('Person', undefined, breeze.EntityState.Detached);
var user = manager.createEntity('User', undefined, breeze.EntityState.Detached);
// set other fields, name, email, password
user.Person(user);
manager.addEntity(user);
manager.addEntity(person);
// save the changes
manager.saveChanges().then(function() { // etc
但我只看到两个实体的两个 OData 帖子,但没有将两个实体联系在一起
- 我排除了 OData 适配器,因为 WebAPI 和 OData 适配器在 Breeze 代码库中调用相同的函数,并且有多个 Breeze/WebAPI 展示了查询和插入相关实体的能力。
- 我还没有看到似乎可以解决此问题的 Breeze.js / OData 示例。
- 最接近的例子是datajs code sample。它将相关实体发布到 /$links/ 以创建关系(我在 Breeze.js 或 JayData 的 OData 适配器中都没有看到)。
【问题讨论】: