c# - EntityFramework Stored Proc Function Importar es posible leer async?
entity-framework asynchronous (1)
Estoy usando EF 6.1.1 y Database First. Cuando importo un proceso almacenado en el edmx y genero el DBContext, se ve así:
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TestSP_Result>("TestSP", params[]...)
Eso devuelve un ObjectResult <T>, que implementa IDbAsyncEnumerable <T>, así que estoy haciendo esto para leer los datos asincrónicos:
IDbAsyncEnumerable<T> enumerable = objectResult as IDbAsyncEnumerable<T>;
IDbAsyncEnumerator<T> enumerator = enumerable.GetAsyncEnumerator();
List<T> list = new List<T>();
bool moreItems = await enumerator.MoveNextAsync(CancellationToken.None);
while (moreItems)
{
list.Add(enumerator.Current);
moreItems = await enumerator.MoveNextAsync(CancellationToken.None);
}
return list;
¿Esto realmente está leyendo los datos de forma asincrónica? Anexé el generador de perfiles y la instrucción SQL real se ejecuta en la línea ExecuteFunction, no al enumerar los resultados.
¿Hay una forma adecuada de ejecutar un proceso almacenado desde el DBContext y leer los resultados de forma asincrónica?
Cómo lo hago:
var results = await ctx.Database.SqlQuery<TResult>("EXEC sp_foo {0}, {1}", p1, p2)
.ToArrayAsync();