2013-03-22 21 views
13

Sto provando a testare il mio primo repository in un nuovo progetto in cui abbiamo deciso di utilizzare EF6 principalmente per le cose asincrone. Sto riscontrando problemi nel simulare un IDbSet per il mio modello e nel consentire l'utilizzo di qualsiasi Linq prima di utilizzare le nuove sottigliezze asincrone.Faking IDbSet <T> con supporto per operazioni asincrone

Sto usando un FakeDbSet come provided in this post. Se faccio una semplice query, come

await set.FirstOrDefaultAsync(e => e.Approved); 

questo funziona benissimo.

Il problema si verifica quando si tenta di fare:

await set.OrderByDescending(e => e.Date) 
     .FirstOrDefaultAsync(e => e.Approved)` 

allora ottengo un errore:

System.InvalidOperationException: The provider for the source IQueryable doesn't implement IDbAsyncQueryProvider.

Con spezzando la sintassi fluente ed esaminando il risultato ad ogni passo, è chiaro per me che IDbAsyncQueryProvider scompare dopo il primo operatore Linq "ordinario" (ad esempio OrderBy, Where o Select).

Come posso farlo funzionare?

Aggiornamento (come c'era una certa confusione): ci sono 2 progetti; chiamali Repository and Test. Test di referenze del corso Repository. La chiamata a Where avviene nel repository e non conosce il file FakeDbSet (né dovrebbe essere, poiché è una classe di solo test).

Aggiornamento 2: Semplice demo project can be downloaded here. Ripristina i pacchetti di Nuget prima di eseguire i test delle unità.

risposta

1

Qui si ha un collegamento con le classi esatte che è necessario implementare. http://msdn.microsoft.com/en-us/data/dn314429.aspx#async

+0

C'è un modo per aggiungere il supporto per .Project(). A () a FakeDBSet? La conversione avviene tramite AutoMapper. Non riesce quando hai Porject(). Per () nel codice. –

+0

Sto anche utilizzando la funzione di progetto AutoMapper e funziona come un fascino. Puoi per favore mostrarci cosa sta fallendo. – Rikard

Problemi correlati