1

Webサービスを作成し、C#とLINQを使用してデータベースからオブジェクトを作成しています。データベース内のテーブルには、対応するオブジェクトと同様に、相互に関係があります。

ただし、Webサービスにアクセスしている私のクライアントでは、関係が失われています。これは、シリアル化に何か問題があると私に信じさせます。シリアル化を機能させるために、シリアル化モードを「単方向」に変更し、関連付けをpublicではなくAccess => internal under childプロパティに設定するようにLINQオブジェクトを編集しました(そうでない場合、循環参照エラーが発生しました)。

そのため、クライアントでオブジェクト参照にアクセスできなくなりました。誰かがそれを解決する方法を知っていますか?それは解決可能ですか?

たとえば、私のWebサービスでは、次のように書くことはできません。

Recipe r = new Recipe();
r.RecipeHasCategories();

レシピとカテゴリーの関係を教えてください。これはクライアントでは機能しません!アクセスできるのは、そのレシピに固有の属性(名前や説明など)だけです。

ヘルプ?

4

1 に答える 1

2

Entity Framework は、既定では関連オブジェクトを読み込みません。リレーションシップを必要とする操作を実行し、エンティティがまだ EF コンテキストにアタッチされている場合、オンデマンドで読み込みが実行されます。

オブジェクトをシリアル化すると、オブジェクトはコンテキストから切り離され、このオンデマンドの読み込みが機能しなくなります。すでにメモリにロードされているものだけをシリアル化します。

メソッドを使用して、元のクエリですべての関連オブジェクトを取得する方法については、この MSDN の記事を参照してください.Include()

アップデート:

Include古い Linq 2 SQL プロバイダーを使用しているため、メソッドはありません。クエリを実行する前DeferredLoadingEnabledに、コンテキスト オブジェクトをに設定して、完了した遅延オブジェクトの読み込みを無効にするだけです。false

于 2012-04-18T14:08:45.517 に答える