如何异步调用 FromSqlRaw 上的 FirstOrDefault?

Lea*_*dro 2 c# async-await entity-framework-core

相关于:EFCore FromSql 异步。通过这个异步调用:

public async Task<myClass> MyMethod(long paramId)
{
    return await _context.Set<myClass>()
        .FromSqlRaw("CALL myStore({0});", paramId)
        .FirstOrDefaultAsync<myClass>();
}
Run Code Online (Sandbox Code Playgroud)

我有这个问题:

FromSqlRaw或者FromSqlInterpolated使用不可组合的 SQL 并在其上组合查询来调用。考虑在or方法AsEnumerable之后调用以在客户端执行组合。FromSqlRawFromSqlInterpolated

所以看来FirstOrDefaultAsync不能与 一起使用FromSqlRaw

我尝试过AsAsyncEnumerable

IAsyncEnumerable<myClass> myResult = await _context.Set<myClass>()
    .FromSqlRaw("CALL myStore({0});", paramId)
    .AsAsyncEnumerable<myClass>();
Run Code Online (Sandbox Code Playgroud)

但它无法编译:

IAsyncEnumerable<myClass>不包含“GetAwaiter”的定义,并且找不到GetAwaiter接受第一个类型参数的IAsyncEnumerable<myClass>可访问扩展方法“ ”(您是否缺少 using 指令或程序集引用?)

Lea*_*dro 5

我用这个解决方法解决了这个问题,因为ToListAsync它有效。

public async Task<myClass> MyMethod(long paramId)
{
    List<myClass> myResult= await _context.Set<myClass>().FromSqlRaw("CALL myStore({0});", paramId).ToListAsync<myClass>();
    return myResult.FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)