1

シナリオ:

私は、SPA でクエリを実行するために Breeze を使用し、POST PUT DELETE メソッドには生の http メソッドを使用しています。リソースの POST メソッドは、作成された子オブジェクトを含む作成されたリソースを返します。

この作成したリソースを beeze エンティティ マネージャにアタッチしたいと考えています。

を使用してエンティティを追加しようとしました

manager.createEntity('Driver', data, breeze.EntityState.Unchanged);

ここで、データ オブジェクトには、ドライバー リソースと関連する子エンティティの配列が含まれます。

ただし、「コレクション ナビゲーション プロパティが設定されていない可能性があります」という例外があります。

手動でローカル エンティティを作成し、子エンティティをアタッチする必要がありますか?それとも、このシナリオは簡単にサポートされますか?

4

1 に答える 1

1

この例外の理由は、「createEntity」メソッドがエンティティを作成し、それに「データ」を割り当てますが、コレクション ナビゲーション プロパティのコレクションは既に存在し、Breeze ではそれを置き換えることができないためです。これは、アプリケーションの他の部分がコレクションへの参照を保持する可能性がある既存のエンティティの意図的な選択でしたが、コレクションに「最初に」アクセスするこの場合にはやり過ぎです。現時点での回避策は、ナビゲーション コレクションを置き換えるのではなく更新することです。

したがって、これを行う最も簡単な方法は、コレクション データ プロパティを指定せずに createEntity メソッドを呼び出し、データをコレクションにプッシュすることです。

var driver = manager.createEntity('Driver', dataWithoutCollections, EntityState.Unchanged)
// then update collection properties by pushing into them.
trafficFines.forEach(function(trafficFine) {  
   driver.trafficFines.push(trafficFine);      // or use push.apply
};

エンティティのコレクション プロパティに追加しても EntityState は変更されないため、これで十分であることに注意してください。

この問題に基づいて、「createEntity」メソッドを呼び出している場合にこの例外を抑制する機能リクエストを追加します。これは、アプリケーションの他の部分が新しいエンティティに既にアクセスしているという危険がないためです。

于 2013-04-11T07:07:24.670 に答える