0

我想从我的数据库中公开一个服务列表,或者只是通过 Web API 返回一个服务详细信息和我的EF DBmodel. 我使用了 VS2012 Web API 脚手架,到目前为止非常简单,它可以在JSON我点击 URL 时返回服务列表(.../api/Services)。问题是,当我只想获得一个服务 URL(.../api/Services/1)时,我仍然获得所有服务的完整列表,尽管当我跟踪它似乎只返回 1 个对象的计数。

这里发生了什么?

这是 2 个控制器操作。

ps:我也尝试使用 a.Where()而不是,.Find()但两种情况下的结果都是一样的。

    // GET api/Services
    public IEnumerable<service> Getservices()
    {
        var services = db.services.Include(s => s.Category).Include(s => s.Country).Include(s => s.StateProvince).Include(s => s.Territory);
        return services.AsEnumerable();

    }
    // GET api/Services/5
    public service Getservice(int id)
    {
        service service = db.services.Find(id);          
        if (service == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }
        return service;
    }
4

2 回答 2

0

首先,检查您的数据库是否有单个项目供您查询。

如果您通过主键查询,那么 db.services.SingleOrDefault(s => s.Id == id)应该这样做。

如果您查询某个可能返回多个结果的字段,您将需要处理该异常。

您使用的过滤变体 ( Single, SingleOrDefault, First, FirstOrDefault) 将取决于代码的确切语义。

于 2013-10-21T21:45:28.740 回答
0

尝试将其处理为:var service = db.services.Single(s => s.Id == id)

于 2013-10-21T21:37:20.307 回答