6

Korzystam z EF 6.1.1 i bazy danych jako pierwszej. Kiedy importować przechowywanej proc do edmx i wygenerować DBContext wygląda to tak:EntityFramework Stored Proc Function Import jest możliwy do odczytu async?

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TestSP_Result>("TestSP", params[]...) 

która zwraca ObjectResult < T>, który realizuje IDbAsyncEnumerable < T> tak robię to przeczytać async danych :

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; 

Czy to naprawdę czyta dane asynchronicznie? Dołączyłem profiler i faktyczne instrukcje SQL uruchamiane w linii ExecuteFunction, a nie podczas wyliczania wyników.

Czy istnieje właściwy sposób uruchomienia przechowywanego procesu z DBContext i odczytania wyników asynchronicznie?

+0

Oto kolejny sposób, aby osiągnąć to, co próbujesz zrobić. http://stackoverflow.com/questions/19250599/how-do-i-kick-off-an-entity-stored-procedure-in-ef6-async-and-not-wait-for-a-ret –

+0

@JasonFoglia, FYI: Wszystko, co łączy rozwiązanie, to kolejkowanie synchronicznych prac nad innym wątkiem wątku, nie osiąga tego, o co pytano. – TravisWhidden

Odpowiedz

12

Jak to zrobić:

var results = await ctx.Database.SqlQuery<TResult>("EXEC sp_foo {0}, {1}", p1, p2) 
        .ToArrayAsync();