实体框架。无法检索数据

时间:2017-09-10 11:39:24

标签: c# sql entity-framework linq

我遇到了非常奇怪的行为,我真的不知道这可能与此有什么关系。我试图以两种方式检索数据:纯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;
} 

1 个答案:

答案 0 :(得分:2)

当达到await时,线程将返回给调用者。当您检查await结果时,因为您没有等待完成任务,所以您无法获得结果。如果您同步运行查询,则可以看到所需的结果:

result = _db.Database.SqlQuery<OrdersDto>("UserOrders @UserId", param).ToArray();

异步运行此代码没有问题,但只有在任务完成时才应检查结果: