我正在尝试使用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。
答案 0 :(得分:2)
当然你不能等待db….SingleOrDefault(…)
。 SingleOrDefault
是同步的,并返回一个实际的非Task对象。
您需要在此处使用SingleOrDefaultAsync(…)
才能等待它。
为什么你不能使用那是另一个问题,但这是你应该问自己的问题。你有必要的进口吗?例如。 System.Data.Entity
?