使用实体框架在Web API 2中进行异步存储过程调用

时间:2018-09-07 12:31:07

标签: c# entity-framework asynchronous asp.net-web-api2

在我们公司中,我们使用存储过程通过同步数据库交互来创建Web API。我最近阅读了Microsoft文档,该文档说异步API应该是默认的(我不再赘述)。我还知道,如果异步实现不正确,您将获得同步方法+额外的开销。

我的问题:

  • 我改编的代码实际上是异步的吗?
  • 如果没有,我如何使其异步?
  • 是否可以验证此代码是否异步?

原始代码:

public class EventsController : ApiController 
{
    EventCapturingToolDBEntities _db = new DBEntities(); 

    IhttpActionResult GetProjectsByUserId(int userId)
    {
        results = _db.getProjectsByUserId(userId).AsQueryable.ToList(); //Stored procedure generated by EF after database first approach
        var processResults = //resultsprocessing
        return Ok(processResults)
    }
}

自适应代码:

public class EventsController : ApiController 
{
    private EventCapturingToolDBEntities _db = new DBEntities(); 

    public async Task<IhttpActionResult> GetProjectsByUserId(int userId)
    {
        var results = await _db.Database
                               .SqlQuery<getProjectsByUserId_Result>("getProjectsByUserId @p0", userId).ToListAsync(); //Class generated by EF as part of the stored procedure
        var processResults = //resultsprocessing
        return Ok(processResults)
    }
} //Is this async?

0 个答案:

没有答案