【问题标题】:Returning complex objects using WebApi using Entity Framework 4使用 Entity Framework 4 使用 Web Api 返回复杂对象
【发布时间】:2012-01-20 20:37:52
【问题描述】:

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

我遇到的问题是我似乎无法为任何实体呈现子集合。例如说我有以下 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; }
    }

并且我想使用以下对我的存储库的调用来检索用户实体和所有用户成就的集合(假设我已经为这 2 个对象中的每一个设置了一个 DbSet)

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

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

我已经阅读了很多关于此事的广泛信息,似乎有人建议创建一个自定义序列化程序来处理复杂的外部实体。我只是认为必须有更好的方法......这肯定会成为 webapi 框架开发中的一个问题 - 我觉得好像我错过了一些基本的东西

谢谢。

【问题讨论】:

    标签: c# entity-framework lambda wcf-web-api


    【解决方案1】:
    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; }
        }
    

    【讨论】:

      【解决方案2】:

      您所缺少的基本部分(而且您并不孤单)是 Web API 框架的工作是使您能够使用 HTTP 将有效负载从 A 点传输到 B 点。

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

      【讨论】:

      • 谢谢!!我深知最终会变成这样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多