私の目標は、OData サーバー上の 2 つのそよ風エンティティ間の単純な関係を維持することです。
サーバーをセットアップしました。次のことができます。
- データを挿入する
- クエリデータ
- クライアント側で 2 つのエンティティ間の関係を作成する
- しかし、関係をサーバー側で永続化することはできません。
私が見逃しているもののアイデアはありますか?
以下は私のセットアップの詳細です
- Node.js (virtualBox、ubuntu 12.04、node.js、MongoDB) で JayData を実行している OData/MongoDB バックエンドを使用しています。
- このスタック オーバーフローの質問に基づいて、ユーザー エンティティと個人エンティティを含む単純なデータ モデルを作成しました。これは 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
しかし、2 つのエンティティに対して 2 つの OData 投稿しか表示されませんが、2 つのエンティティを結び付けるものは何もありません
- WebAPI と OData アダプターの両方が Breeze コード ベースで同じ関数を呼び出し、関連するエンティティをクエリおよび挿入する機能を示す複数の Breeze/WebAPI があるため、OData アダプターを除外しました。
- これに対処していると思われる Breeze.js / OData サンプルは見たことがありません。
- 動作する最も近い例は、datajs コード サンプルです。関連するエンティティを /$links/ に投稿して関係を作成します (Breeze.js または JayData の OData アダプターには見られないもの)。