2011-12-15 73 views
2

我已经使用WebApi和实体框架构建了一个REST服务。在我的应用程序中,我有两个项目 - 一个具有API功能,另一个具有我将在我的Web项目中使用的模型类。使用实体框架使用WebApi返回复杂对象4

我遇到的问题是我似乎无法呈现任何实体的子集合。例如说我有以下2类:

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; } 
    } 

,我想检索用户实体,并使用以下调用我的库中的所有用户的成就的集合(假设我有一个DbSet每个代替2个对象已经)

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

我已经运行该代码,并通过包含上述陈述的方法调试并正确检索所有的,我所需要的信息,但是,在这之后的数据是不呈现给浏览器,而是返回内容长度为零。

我已阅读了大量有关此事的广泛信息,似乎有建议创建自定义序列化器来处理复杂的外国实体。我只是认为有一个更好的办法......当然这是webapi框架开发中的一个问题 - 我觉得我缺少一些基本的东西

谢谢。

+0

是否引发任何异常? – 2011-12-15 12:07:29

回答

4

您缺少的基本部分,而你远离孤独,是Web API框架的工作是使您可以使用HTTP来从A点传送的有效载荷到B点

如何这些有效载荷的构建是一个完全独立的问题,应该被视为您的应用程序的不同部分。 Web API团队已经尝试构建一些简单的有效负载构建工具,但是如果您尝试构建任何体面大小的应用程序,那么我建议您完全控制该过程。不要指望Web API为你做到这一点。

+0

谢谢!我在后面知道它最终会变成这样的情况。 – 2012-02-02 22:21:34

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; } 
    }