我遇到了非常奇怪的行为,我真的不知道这可能与此有什么关系。我试图以两种方式检索数据:纯LINQ和存储过程,但数据不会回来。没有错误或例外。在SQL Server端,我可以从分析器看到存储过程已执行。
public async Task<IEnumerable<OrdersDto>> GetAll(int userid)
{
OrdersDto[] result;
try
{
SqlParameter param = new SqlParameter("@UserId", userid);
result = await _db.Database.SqlQuery<OrdersDto>("UserOrders @UserId", param).ToArrayAsync();
//var result = await _db.Order.Where(x=> x.CustomerId == 1)
// .Include(x => x.OrderDetails)
// .Include(x => x.OrderStatus)
// .Include(x => x.PaymentStatus)
// .AsNoTracking().ToArrayAsync();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
答案 0 :(得分:2)
当达到await
时,线程将返回给调用者。当您检查await
结果时,因为您没有等待完成任务,所以您无法获得结果。如果您同步运行查询,则可以看到所需的结果:
result = _db.Database.SqlQuery<OrdersDto>("UserOrders @UserId", param).ToArray();
异步运行此代码没有问题,但只有在任务完成时才应检查结果: