无法等待" ProjectName.Models.Class"

时间:2015-11-23 07:46:54

标签: c# async-await

我正在尝试使用DTO从数据库中检索一些数据。我在课堂上遵循了一个指导示例,但出于某种原因,它并没有等到我的班级。这是一段代码。

// GET api/Orders/5
[ResponseType(typeof(OrderDetailDTO))]
public async Task<IHttpActionResult> GetOrder(int id)
{
    var order = await db.Orders.Include(o =>o.drug).
    Include(o=>o.patient).Include(o => o.doctor).Select(o => new OrderDetailDTO()
    {
        Id = o.Id,
        instruction = o.instruction,
        quantity = o.quantity,
        totalPrice = o.totalPrice,
        patientName = o.patient.name,
        doctorName = o.doctor.name,
        drugName = o.drug.drugName

    }).SingleOrDefault(o => o.Id == id);
    if(order == null)
    {
        return NotFound();
    }
    return Ok(order);
}

有什么想法吗?

要添加的一些内容:在示例中,我应该以:

结束它
}).SingleOrDefaultAsync(o => o.Id == id);

但它只允许SingleOrDefault。我已经仔细检查了我的使用字段,但没有什么特别错误。

编辑:感谢您的回复!我已经解决了我的问题。

我了解到我需要使用SingleOrDefaultAsync来返回一个等待的对象。 SingleOrDefaultAsync需要EF6。

1 个答案:

答案 0 :(得分:2)

当然你不能等待db….SingleOrDefault(…)SingleOrDefault是同步的,并返回一个实际的非Task对象。

您需要在此处使用SingleOrDefaultAsync(…)才能等待它。

为什么你不能使用那是另一个问题,但这是你应该问自己的问题。你有必要的进口吗?例如。 System.Data.Entity