2010-09-23 8 views
15

Quindi mi è stato consigliato alcune volte di disabilitare il caricamento lento durante la creazione di un'applicazione con i framework precedenti e che ToList() impone l'esecuzione delle query nel mio repository. Mi è stato detto che avrei evitato certe "trappole" in cui avrei potuto imbattermi se usassi AsEnumerable().ASP.NET MVC2 con Entity Framework 4 - AsEnumerable() o ToList() nel repository?

In una domanda recente, tuttavia, ho incluso un gruppo di ToList() nei miei esempi di codice e ho sorpreso un numero di persone che mi ha assicurato che IEnumerable è molto meglio restituire.

Sono completamente confuso ora, per non dire altro.

Devo restituire IEnumerable nel mio repository, quindi convertirli in List nei miei modelli di vista? Dovrei usare ToList() nel mio repository come ero prima? Supponevo di lasciare l'esecuzione differita abilitata in primo luogo?

Jiminy Natale ...

Edit: Quindi, essendo che io disabile pigro carico, sulla base del parere precedente, dovrei poi riattivarla, ritorno IEnumerable/IQueryable dal mio repository, e convertire la raccolta a un elenco nei miei modelli di vista, se necessario?

Una delle risposte sottostanti associa IEnumerable all'esecuzione ansiosa, mentre avevo l'impressione che solo ToList() avrebbe imposto l'esecuzione immediata della query.

Mi sono imbattuto in this, this e this che contengono tutte interessanti discussioni relative a questa domanda.

risposta

16

chiamata ToList(), la restituzione di un IEnumerable nel proprio repository, se:

  1. Si vuole controllare il set di uscita fornite al consumatore (vale a dire non si vuole loro di eseguire query su di esso), e
  2. Non ti dispiace un'esecuzione entusiasta.

ritorno IQueryable, o IEnumerable via AsEnumerable(), nel proprio repository se:

  1. Non ti dispiace vostri consumatori l'esecuzione di query sul set di uscita, e
  2. Volete esecuzione differita.

Vedere anche
http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case

+0

Suppongo parte della mia domanda comprendeva anche se non dovrei essere forzando l'esecuzione ansioso con la data combinazione di quadri, come alcuni hanno consigliato. – asfsadf

+0

In aggiunta ai fattori che ho già menzionato, forzare l'esecuzione impaziente può effettivamente causare problemi di prestazioni; l'intero set di dati viene restituito in un colpo solo, anche se il consumatore potrebbe non aver effettivamente bisogno di tutti i dati. –

+0

Articolo interessante. Grazie. – asfsadf

Problemi correlati