複雑な型をそよ風に遅延ロードしようとしていますが、これを達成する方法がわかりません。
ナビゲーションの方法ではなく複雑なタイプを使用したい理由は、私が消費しなければならないサービスが、ブリーズと同じ方法で CRUD を実行していないからです。すべてのサブオブジェクト (スカラーと非スカラーの両方) を含む 1 つのオブジェクトを、データの格納 (挿入/更新/削除) を担当する 1 つのサービス メソッドに送信する必要があります。
ナビゲーション プロパティを使用してこれを実行しようとしましたが、これはエンティティの配列を作成して API コントローラーに送信し、そこでオブジェクト全体を再作成する必要があることを意味します。これは困難ですが、子オブジェクトには外部キーがないため (これまでに見たすべてのサンプルに当てはまります)、それらを再度マップするのが面倒です。
複雑な型では、この問題はありません (または、私が認識していません)。
次のようなオブジェクト構造を使用する必要があります。
1.親: 製品 (クラス)
1.1Child: パッケージ (配列)
1.2Child: splitLevels (配列)
1.2.1Grandchild: パーミッション (配列)
1.2.1.1孫:薬局(配列)
1.2.2Grandchild: splitLevel (クラス)
パッケージは製品と一緒にロードされます。これは問題なく機能します。ただし、splitLevels はこの datacontract には含まれていません (必要なデータが多すぎて、それほど頻繁には参照されないため)。このデータを要求すると、ブール値が製品に追加されてロードされたことを示します。それ以降は、サーバーにもデータを送信する必要があります。
製品をロードするとき、これにより問題が発生します: オブジェクトはプロパティまたはメソッド 'getProperty' をサポートしていません
これは、breeze の _initializeInstance メソッドが原因です。
if (initFn) {
if (typeof initFn === "string") {
initFn = instance[initFn];
}
initFn(instance);
}
this.complexProperties && this.complexProperties.forEach(function (cp) {
var ctInstance = instance.getProperty(cp.name);
cp.dataType._initializeInstance(ctInstance);
});
インスタンスが空です。そこからプロパティを取得できません。
これを回避する方法はありますか? 複数のエンティティを取得せずにナビゲーション プロパティを使用する方法はありますか。したがって、これを使用せずに単一のオブジェクトを送信できます。
if (product.entityAspect.entityState.isUnchanged()) {
product.entityAspect.setModified();
}
// Packages
var entitiesToSave = product.packages().slice();// copy
// Split Levels
if (product.storeSplitLevels) {
product.splitLevelsLoaded(true);
// TODO: Add split levels to entities to save
}
// Product Details
entitiesToSave.push(product);