/ / EF & Razor Mantenendo le colonne inutilizzate fuori dal filo - asp.net-mvc, entity-framework, rasoio

EF & Razor Mantenendo le colonne inutilizzate fuori dal filo - asp.net-mvc, entity-framework, rasoio

Sto lavorando su una pagina usando ASP.NET MVC3, Razor and Entity Framework. Ho usato nuget per afferrare il mini-profiler e sto notando che le chiamate SQL stanno interrogando tutte le colonne. Mi rendo conto che questo sta accadendo perché sto usando il ponteggio "e le viste con IEnumerable, quindi il mio controller sta restituendo View (Type .Elencare()).

La mia reazione istintiva è di montare un po 'di linq per selezionare solo le colonne di cui ho bisogno e inserirle in una lista, ma poi perderò i miei "forti" tipi di EF e le loro chicche come le proprietà di navigazione.

È possibile istruire EF a riportare solo i dati per un determinato sottoinsieme delle colonne della tabella interrogata?

risposte:

1 per risposta № 1

Puoi cambiarlo per lasciare la lista come IQueryable (basta rimuovere il .ToList()) e selezionare all'interno della vista. Poiché l'esecuzione della query SQL viene posticipata finché non si enumerano i risultati, qualsiasi filtro aggiunto all'interno della vista perfezionerà la query. A seconda di come la si guarda, questo tipo di problemi con la separazione delle preoccupazioni però.

Il tuo codice di visualizzazione diventerebbe:

@model IQueryable<SomeType>
<ul>
@for(var item in Model.Select(x => new { x.Property1, x.Property2 })) {
<li>@item.Property1</li>
}
</ul>

Se tu dovessi adottare questo approccio, avresti bisogno diè molto prudente nel tuo punto di vista per assicurarti di non aver elencato IQueryable più di una volta (facendo così query aggiuntive nel database e annullando qualsiasi vantaggio in termini di prestazioni).

Il percorso più sicuro sarebbe quello di creare un modello di visualizzazione personalizzato per ogni vista e proiettarlo in quello, ma ciò non risponde in realtà alla tua domanda.