c# - 使用 Entity Framework 4 使用 Web Api 返回复杂对象

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

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

我遇到的问题是我似乎无法呈现任何实体的子集合。举例来说,我有以下 2 个类(class):

    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)

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

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

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

谢谢。

最佳答案

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

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

关于c# - 使用 Entity Framework 4 使用 Web Api 返回复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515189/

相关文章:

c# - 如何在 Xamarin.forms 中使用画中画模式?

c# - 从 asp :Repeater with Button 中删除行

entity-framework - System.Data.Entity.Edm.EdmEntityType 没有定义键

c# - 在一个 View 中处理多个模型的最佳方法

c# - 如何使用新方法动态扩展 C# 类

asp.net - 如何在MVC Razor中处理空子实体

c# - 对于内存中添加的新实体,为什么 EF 不会将 EntityState 显示为“已添加”?

c# - lambda 表达式的扩展方法

java - 有没有一种优雅的方法来获取Java中多个方法返回的第一个非空值?

c# - 将 C# lambda 表达式移植到 PHP