ich von hierWie zurückkehren IQueryable <T> zur weiteren
https://github.com/TroyGoode/PagedList
die PagedList.Mvc Bibliothek bin versucht, die dieses Anwendungsbeispiel
var products = MyProductDataSource.FindAllProducts(); //returns IQueryable<Product> representing an unknown number of products. a thousand maybe?
var pageNumber = page ?? 1; // if no page was specified in the querystring, default to the first page (1)
var onePageOfProducts = products.ToPagedList(pageNumber, 25); // will only contain 25 products max because of the pageSize
typische implmentations von MyProductDataSource.FindAllProducts hat (); entlang der Linien sind
public IQuerable<T> MyProductDataSource.FindAllProducts()
{
using (var ctx = new MyCtx())
{
return ctx.MyList().Where(....);
}
}
was natürlich die InvalidOperationException hat() und DbContext ist bereits Nachricht
der Suche nach Best Practices, wie zurückzukehren IQueryable angeordnet, die ohne Probleme hier verwendet werden können?
Dies ist KEINE typische Implementierung. Normalerweise injizieren Sie einen Kontext in eine Repository-Klasse, was bedeutet, dass Sie nicht auf Methodenebene verfügen. –
@WiktorZychla Ich stimme nicht zu. Beide sind nützliche Implementierungen. Wenn es möglich ist, den Kontext lokal auf die Methode zu beschränken, ist dies eine akzeptable Aufgabe. Wenn die Generierung der Abfrage jedoch über den Bereich dieser Methode hinausgeht, die keine Option ist, müssen Sie in solchen Fällen den Umfang des Kontexts anpassen dass es, wo auch immer es ist, die Lebensdauer dieser Abfrage umfasst. Programmierer sollten in der Lage sein zu verstehen, was die Lebensdauer einer gegebenen Abfrage ist, und den Kontext so abgrenzen, dass er auf der gleichen "Ebene" ist, nicht mehr und nicht weniger. – Servy
@Servy: Wahr, aber in den meisten Fällen ist die Lebensdauer Ihres Kontextes "per-http-context". Beachten Sie, dass er die Frage mit asp.net markiert.Was Sie sagen, ist ein Teil einer allgemeinen Theorie, er braucht eine genaue Anleitung für sein spezifisches asp.net-Szenario. –