3

上記の構成を機能させようとしましたが、運がありません。

ステップ1)

WCF サービス アプリケーションプロジェクトで新しいソリューションを開始しました。

ステップ2)

このプロジェクトでは、edmx ファイルを追加し、非常に単純なモデルを作成します: IdDisplayNameを持つ
Entity Parent IdChildDisplayNameを持つ Entity Child Association from Parent to Child1-to-m、結果として両方のエンティティに NavigationProperties が生成されます。 問題なくデータベースを生成しました。生成後、関連する 2 つの子オブジェクトを持つ 1 つの親オブジェクトを手動データベースに挿入しました。


ステップ 3)

ADO.NET Self-Tracking Entity Generatorを使用して、コード生成を追加しました。これは別のアセンブリで行う必要があることはわかっていますが、わかりやすく簡単にするために、すべてを同じプロジェクト (WCF プロジェクト) に配置します。

ステップ 4)

IService インターフェイスを変更して、単純な get を作成しました

    [OperationContract]
    Parent GetRootData(Int32 Id);

対応する実装では、コンテキストからPageオブジェクトを取得して返します。

    using (PpjSteContainer _context = new PpjSteContainer() )
    {
        return _context.ParentSet.Include("Child").Single(x => x.Id == Id);
    }

問題:

ここでこのプロジェクトを実行すると (Service1.svc は開始ページです)、VS2010 はサービスを呼び出すテスト クライアントを自動的に生成します。しかし、サービスを呼び出すと、StackOverflowException が発生します。サーバー側でのデバッグは、オブジェクト グラフが返されるまで問題ないように見えます。

Include("Child")を削除すると、すべて問題ありませんが、もちろんChildオブジェクトが欠落しています。
何が欠けているのかわかりません。私は多くのハウツーとガイドを読みましたが、すべて私がやった方法でそれを行います(少なくともそれは私が思うことです)...私はここ
で 学校の例を試しましたが、データベースの生成と例のコーディングは一致しません。

ですから、誰かがこの作業を行う方法を教えていただければ幸いです。

PS

  • はい、すべてのエンティティ クラスは「[DataContract(IsReference = true)]」とマークされています。
  • edmx ファイルで Lazy-Loading が「false」に設定されている

編集:
WCF を IIS ではなく、コンソール アプリでホストされるように変更しました。もちろん、私は自分の小さなテスト クライアントを作成する必要がありました。
面白いことに、今ではすべてが機能しています。もちろん理由はわかりませんが、少なくとも私のテストでは、これが解決策です...

4

1 に答える 1

0

こちらをご覧ください。基本的に、ナビゲーション プロパティのサイクルをシリアライザーに認識させる必要があります。

于 2011-03-17T20:03:40.450 に答える