2011-12-15 7 views
2

WebApiとEntity Frameworkを使用してRESTサービスを構築しました。私のアプリケーションでは、2つのプロジェクトがあります.1つはAPI機能を備え、もう1つはWebプロジェクトで使用するモデルクラスです。Entity Framework 4を使用してWebApiを使用して複合オブジェクトを返す

私が抱えている問題は、いずれかのエンティティの子コレクションをレンダリングすることができないことです。私はそれぞれのDbSetを持っていると仮定して(

public class User 
    { 
     public int UserId { get; set; } 

     public string Name { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public virtual Collection<Achievement> Achievements { get; set; } 
    } 

    public class Achievement 
    { 
     public int AchievementId { get; set; } 

     public string Achievement { get; set; } 
     public string Value { get; set; } 

     public User User { get; set; } 
    } 

と私は私のリポジトリに次の呼び出しを使用して、ユーザーのエンティティとすべてのユーザーの業績のコレクションを取得したい:私は、次の2つのクラスを持っていること、たとえば言いますすでに2つのオブジェクトの)

var user = dbContext.Users 
       .Include(u=>u.Achievements) 
       .Where(u=>u.UserId == 1) 
       .First(); 

私はこのコードを実行し、デバッグ上記の文を含むメソッドを介して、それが正しく、私は必要なすべての情報を取得し、しかし、これ以降のデータがありましたブラウザにレンダリングされず、代わりにコンテンツの長さゼロが返されます。

私はこの問題に関する豊富な情報をたくさん読んできました。複雑な外部エンティティを処理するためのカスタムシリアライザを作成するための提案があるようです。私はちょうど良い方法があると思う...確かに、これはwebapiフレームワークの開発の問題でした - 私は何か基本的なものを欠いているように感じる。

ありがとう。

+0

例外がスローされますか? –

答えて

4

あなたが不足している基本的な作品、そしてあなたは遠いだけでからですが、ウェブAPIフレームワークの仕事は

方法B.

を指すように、点Aからペイロードを転送するためにHTTPを使用することができますすることであるということですこれらのペイロードは完全に別個の問題であり、アプリの別個の部分として扱われるべきです。 Web APIチームは、単純なペイロード構築ツールを簡単なケースで構築しようとしましたが、適切なサイズのアプリケーションを構築しようとしている場合は、そのプロセスを完全にコントロールすることをお勧めします。 Web APIがそれを行うとは思わないでください。

+0

ありがとう!!私は、私の心の後ろに、そういう状況に終わることを知っていました。 –

0
let me know if its a serialization issue. 

[DataContract] 
public class User 
{ 
    [DataMember] 
    public int UserId { get; set; } 

    [DataMember] 
     public string Name { get; set; } 

    [DataMember] 
     public string FirstName { get; set; } 

    [DataMember] 
     public string LastName { get; set; } 

    [DataMember] 
     public virtual Collection<Achievement> Achievements { get; set; } 
    } 

    [DataContract] 
    public class Achievement 
    { 

    [DataMember] 
     public int AchievementId { get; set; } 

    [DataMember] 
     public string Achievement { get; set; } 

    [DataMember] 
     public string Value { get; set; } 

    [DataMember] 
     public User User { get; set; } 
    } 
関連する問題