1

.Net 4.0 WCF サービスの一部として EF4 を試しています。このサービスの目的は、ドキュメント データをエンティティ オブジェクトの配列として ASP.Net アプリに返すことです。アプリはまだ .Net 2.0 です。ソリューションの性質上、コンテキスト レベルで LazyLoading を無効にしました。私はこれから始めました:

var revQuery = from revs in context.tbl_Document_Revision
                       where (revs.ID == myIDVar)
                       select revs;

すべて正常に動作し、正しい数のオブジェクトが表示されます。ただし、Include をクエリに追加して、ナビゲーションが定義されている関連テーブルからフィールドを取得できるようにすると、最初のレコードのみが呼び出し元のアプリケーションに完全に入力されて返されます。

var revQuery = from revs in context.tbl_Document_Revision.Include("tbl_Staff")
                       where (revs.ID == myIDVar)
                       select revs;

配列は正しいサイズですが、最初の要素以降のすべての要素は空白のデフォルトのプレースホルダーです。インクルードの使用が LazyLoading に戻ったようなもので、それを行に入れることができないようです。他の誰かがこの問題を抱えていましたか?

4

2 に答える 2

0

includeメソッドを使用するのではなく、プロパティを明示的にロードしてみてください。ただし、includeメソッドが機能しない理由はわかりません。

    var revQuery = from revs in context.tbl_Document_Revision
                   where (revs.ID == myIDVar)
                   select revs;
    foreach(var rev in revQuery)
    {
    context.LoadProperty(rev, "tbl_staff");
    }

もう1つ試してみるのは、クエリ構文の代わりにlamdaを使用して、それが役立つかどうかを確認することです。

    var revQuery = context.tblDocument_Revision.Include("tbl_staff")
    .Where( tbl => tbl.ID == myIDVar)
于 2011-08-07T06:47:00.057 に答える
0

この問題に戻って Jack の提案を試してみると、考えられる答えにたどり着きました。最初の問題が発生したとき、私はまだ開発中で、開発用 PC でサービスとアプリケーションをホストしていました。それを回避した後、WCF サービスのテスト バージョンをデプロイしました。

上記で提案された変更をテストするために行ったとき、私のアプリケーションはまだサービスのテストインスタンス (昨年から変更されていません) を指していました。したがって、サービスと呼び出し元のアプリケーションが同じマシン上にある場合にのみ、問題が発生しているように見えます。理由は賢い人に任せます!:-)

于 2011-08-16T14:08:01.700 に答える