1

私の目標は、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 アダプターには見られないもの)。
4

1 に答える 1

0

Breeze を JayData サーバーで使用したことはありませんが、JayData クライアント ライブラリを使用して 1 年間 OData 経由でデータを保存しており、静的スキーマ (JaySvcUtil で生成) と動的スキーマ (サーバーからメタデータを取得) で動作します。実行時) も同様です。

重要なことに:

  • POCO オブジェクトではなく、型付きエンティティを使用する
  • 関係の必要な側を設定して、アイテムを永続化します

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://include.jaydata.org/datajs-1.0.3.min.js"></script>
    <script src="http://include.jaydata.org/jaydata.js"></script>
    <script>
            var url = 'http://localhost:54001/personService';
    
            $data.service(url, function(contextFactory, contextType){
                var db = contextFactory();
                db.onReady(function(){
    
                    var user = new db.User.elementType({ EmailAddress: 'joe.smith@company.org'});
                    var person = new db.Person.elementType({ FistName: 'Joe', LastName: 'Smith', User: user }); //set the value to the required side of the relationship to have your entities saved in the batch
                    db.Person.add(person)
    
                    db.saveChanges(function () {
                        db.Person.include('User').toArray(function (p) { console.log(p);});
                    });
                })
            });
    

免責事項: 私は JayData 開発チームのメンバーなので、サーバー側でもお手伝いできます。

于 2013-05-17T14:28:26.497 に答える