Attualmente sto creando un'applicazione in C# 4.0 con EntityFramework 6.0.Clausola Where non inclusa nella query SQL
Sto cercando di recuperare un elenco di elementi dal database ma il problema è che la query SQL generata dal framework EF non include la clausola where.
Così, l'intera tabella/vista viene caricata in memoria e ci vogliono circa 10 secondi per ottenere solo 2 o 3 elementi.
Di seguito, il metodo della mia GenericRepostitory:
public IList<TEntity> GetList(Func<TEntity, bool> where, params Expression<Func<TEntity, object>>[] navigationProperties)
{
using (var dbContextScope = contextScopeFactory.CreateReadOnly())
{
IQueryable<TEntity> dbQuery = Context.Set<TEntity>().AsQueryable();
foreach (Expression<Func<TEntity, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<TEntity, object>(navigationProperty);
var list = dbQuery
.AsNoTracking()
.Where(where);
Context.Database.Log = s => Debug.WriteLine(s);
return list.ToList<TEntity>();
}
}
E mi chiamano così:
var repository = repositoryFactory.Get<Context, Entity>();
var items = repository.GetList(x => x.FakeID <= 10);
Il risultato restituito è buona, ma ci vogliono circa 10 secondi per essere recuperati. E quando il debug scrive la query SQL generata, la clausola where non è in nessun punto
Come posso modificare la mia funzione GetList per includere la clausola where?
Spero di essere stato abbastanza chiaro con queste informazioni e mi dispiace per il mio inglese. Non è la mia lingua madre:/
In ogni caso, ringraziare il vostro per il vostro aiuto
'Context.Set() .AsQueryable();' 'Qual è Context' se non un' DbContext '? 'AsQueryable' non dovrebbe essere necessario qui. –
Sì, non dovrebbe, l'ho rimosso. È perché sono rimasto bloccato con questo problema da poche ore e ho provato molte cose diverse ... – Mica