2

ナビゲーション プロパティでさらに別の問題が発生していますが、今回の構成は WCF Data Service + EF です。

基本的に、メタデータは見栄えがよく、参照制約、関連付けなどがあります... モデルに [ForeignKey] 属性を設定しました。

ナビゲーション プロパティはクライアント側で作成されますが、($expand を使用して) データを取得すると、データはサーバーによって確実に返されますが、コレクションは満たされません。

ここに画像の説明を入力

ここでの関連付けは、OpenPosition の mandate_id と Mandate の id の間です。

OpenPositions コレクションの Mandate エンティティに、エンティティへの uri と共に __deferred が含まれていることに気付きました。私はWebApiでそれを見たことがなかったので、それが問題なのか、それとも単に通常の動作なのか.

私が欠けているものはありますか?

編集

クライアント側のクエリは次のとおりです。

  var query = breeze.EntityQuery.from("Mandates").inlineCount().expand("OpenPositions");
  return manager.executeQuery(query.using(service)).then(function (result) {
        logger.info(result);
    }).fail(function (error) {
        logger.error(error);
    });

編集2

ナビゲーション プロパティが入力されていない理由は、WCF Dataservice の場合、ナビゲーション プロパティがオブジェクトとして返され、結果と呼ばれる配列プロパティが含まれているためです。

一方、WebAPI の場合、ナビゲーション プロパティは配列として返されます。

どちらの場合も、同じデータ モデル (EF コンテキスト) が使用されていることに注意してください。

スクリーンショットを見る:

WCF :

ここに画像の説明を入力

WebAPI:

ここに画像の説明を入力

しかしそよ風はそれ以外の場合は配列を期待し、ナビゲーション プロパティを無視して null を返します。

   // needed if what is returned is not an array and we expect one - this happens with __deferred in OData.
        if (!Array.isArray(relatedRawEntities)) return null;
4

3 に答える 3

2

わかりました、最終的には機能しています:)私は現在、githubでbreezejsの最新のコミットを使用しており、これで問題が解決しました。私の意見では、WCF 経由のそよ風は、これまで ODATA2 では機能しませんでした。ODATA仕様はそれについて明確です:

  • ODATA V1 : コレクションは配列として表されます
  • ODATA V2: コレクションは、配列を含むオブジェクトとして表されます。

Breezejs の github バージョンを使用する前に動作させる唯一の方法は、datajs で MAX_DATA_SERVICE_VERSION を 1.0 に指定することでした。

とにかく、もういいです。そよ風がリリースされるのが待ちきれません :) ちなみに、NHibernate のために OpenAccess を捨てるつもりです。NH WebAPI コントローラーは EF WebAPI コントローラーと同じくらい完全ですか?

于 2013-10-12T09:22:10.070 に答える
0

「WebApi」データ サービス アダプタまたは「OData」データ サービス アダプタを使用していますか? 一般に、OData を介してデータを明示的に公開しない限り、"webApi" データサービス アダプターを使用する必要があります。「webApi」アダプターがデフォルトであるため、「OData」に言及している「initializeAdapterReference」呼び出しをすべて削除してみます。

于 2013-10-03T20:00:37.817 に答える
0

フォローアップとして、問題はまさにそれです:

-従来の ODATA サービスでは、ナビゲーション プロパティは「結果」と呼ばれるオブジェクトに埋め込まれます。

ここに画像の説明を入力:

一方、WebAPI サービスでは、ナビゲーション プロパティは単なる配列です。

ここに画像の説明を入力

次に、微風コードのある時点で、次のテストがあります。

 // needed if what is returned is not an array and we expect one - this happens with __deferred in OData.

if (!Array.isArray(relatedRawEntities)) は null を返します。

従来の ODATA サービスの場合、明らかに null が返され、ナビゲーション プロパティは設定されません。

それ以上に自分をはっきりさせる方法がわかりません。メタデータの問題ではなく、breath のバグのようです。

私が言っていることが理にかなっていることを確認できますか? それについて何かできることはありますか?

于 2013-10-10T11:35:25.813 に答える