Multi-async in Entity Framework 6?

Questo è il mio codice:

var banner = context.Banners.ToListAsync() var newsGroup = context.NewsGroups.ToListAsync() await Task.WhenAll(banner, newsGroup); 

Ma quando ho chiamato la funzione dal controller. Ha mostrato errore

Una seconda operazione è iniziata in questo contesto prima che fosse completata una precedente operazione asincrona. Utilizzare ‘attendi’ per assicurarsi che tutte le operazioni asincrone siano state completate prima di chiamare un altro metodo in questo contesto. Non è garantito che tutti i membri di istanza siano thread-safe.

Per favore aiutami a risolvere questo problema.

L’eccezione spiega chiaramente che è consentita una sola operazione asincrona per contesto alla volta.

Quindi, devi await uno alla volta come suggerisce il messaggio di errore:

 var banner = await context.Banners.ToListAsync(); var newsGroup = await context.NewsGroups.ToListAsync(); 

Oppure puoi usare più contesti:

 var banner = context1.Banners.ToListAsync(); var newsGroup = context2.NewsGroups.ToListAsync(); await Task.WhenAll(banner, newsGroup); 

Se si utilizza il contenitore IoC per l’iniezione del proprio fornitore di dati, è consigliabile utilizzare il tipo “transiente” o “PerWebRequest” per il proprio ciclo di vita.

Ad esempio: https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md

Se si utilizza Unity per l’integrazione delle dipendenze con il modello di repository ad esempio, si otterrà il seguente errore utilizzando due o più contesti con create / update / delete:

La relazione tra i due oggetti non può essere definita perché sono collegati a oggetti ObjectContext diversi.

Questo può essere risolto usando PerRequestLifetimeManager . Maggiori informazioni qui:

C # EF6 effettua più chiamate asincrone in un contesto utilizzando Unity – Asp.Net Web Api

 container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType(); container.RegisterType();