Ich erstelle derzeit eine Anwendung in C# 4.0 mit EntityFramework 6.0.Where-Klausel nicht in SQL-Abfrage enthalten
Ich versuche, eine Liste des Elements aus der Datenbank abzurufen, aber das Problem besteht darin, dass die vom EF-Framework generierte SQL-Abfrage die WHERE-Klausel nicht enthält.
So wird die gesamte Tabelle/Ansicht in den Speicher geladen und es dauert etwa 10 Sekunden, um nur 2 oder 3 Elemente zu erhalten.
Im Folgenden wird das Verfahren von meinem 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>();
}
}
Und ich es so nennen:
var repository = repositoryFactory.Get<Context, Entity>();
var items = repository.GetList(x => x.FakeID <= 10);
Die Rückkehr Ergebnis ist gut, aber es dauert ca. 10 Sekunden abgerufen werden. Und wenn das Debug die geschriebene SQL-Abfrage schreibt, ist die WHERE-Klausel nirgendwo
Wie kann ich meine Funktion GetList ändern, um die WHERE-Klausel aufzunehmen?
Ich hoffe, ich war genug klar mit diesen Informationen und es tut mir leid für mein Englisch. Es ist nicht meine Muttersprache:/
Wie dem auch sei, wir danken Ihr für Ihre Hilfe
'Context.Set() .AsQueryable();' Was ist 'Context' wenn kein' DbContext '? 'AsQueryable' sollte hier nicht benötigt werden. –
Ja sollte es nicht, ich habe es entfernt. Es war, weil ich seit ein paar Stunden mit diesem Problem feststeckte und viele verschiedene Dinge ausprobierte ... – Mica