2012-03-12 11 views
3

私はEntity FrameworkでASP.NET Web APIを使用しています。 デフォルトのシリアライザをJSON.NETに変更しました(デフォルトのDataContractSerializerがEFで全く機能しなかったためです)。 今は良い(それは少なくとも働いている)が、まだ完璧ではない。 GETリクエストを送信した後、私は1つのテーブルからすべてのプロパティと、ナビゲーションプロパティからのデータのロットを取得します(基本的に、取得したいエンティティとの関係を持つ他のエンティティのすべてのデータ)。 ナビゲーションプロパティではなく、このエンティティからのフィールドのみをシリアル化するにはどうすればよいですか?シリアル化時にナビゲーションプロパティを無視する方法

ありがとうございました

+1

私はこう言っています:遅延読み込みを無効にし、テストが役に立ったらテストします。 – Slauma

+0

ありがとう!出来た!しかし、私は本当に理由は分かりません。レイジーローディングは基本的にデータの読み込みを遅らせるので、なぜそれが原因でしたか? – Bart

+0

クール!私は、私のコメントを追加の説明とともに答えに変えました。 – Slauma

答えて

1

遅延読み込みを無効にしてみてください。

Jsonシリアライザはエンティティのプロパティを反復してシリアル化しているため、ナビゲーションプロパティのゲッターも呼び出しています。ナビゲーションプロパティのゲッターを呼び出す=遅延読み込みをトリガーする。読み込みはちょっと遅かったですが、シリアライザがナビゲーションプロパティに到達して、子データベースのプロパティ値を取得するために追加のデータベースクエリが発生し、その後シリアル化されました。

2

レイジーローディングを無効にすると、JSONシリアライゼーションからリレーションシップが効果的に削除されますが、ナビゲーションプロパティは引き続きJSONに表示されます。

これらのナビゲーションプロパティが便利でない場合、またはコントローラで目的のプロパティを選択する必要がある場合は、モデルからこれらのナビゲーションプロパティを削除する必要があります。

+1

EF 6では何もしません – arviman

関連する問題