Próbuję bibliotekę PagedList.Mvc stądJak zwrócić IQueryable <T> do dalszych zapytań
https://github.com/TroyGoode/PagedList
który ma tę próbę użycia
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
typowe implmentations z MyProductDataSource.FindAllProducts (); są wzdłuż linii
public IQuerable<T> MyProductDataSource.FindAllProducts()
{
using (var ctx = new MyCtx())
{
return ctx.MyList().Where(....);
}
}
co oczywiście ma InvalidOperationException() i DBContext jest już umieszczona wiadomość
Szukasz najlepszych praktyk dotyczących sposobu, aby powrócić IQueryable który może być używany tutaj bez problemów?
To NIE jest typowa implementacja. Zazwyczaj wstrzykujesz kontekst do klasy repozytorium, co oznacza, że nie upuszczasz go na poziomie metody. –
@WiktorZychla Nie zgadzam się. Obie są przydatnymi implementacjami. Kiedy możliwe jest lokalne dostosowanie kontekstu do metody, jest to do przyjęcia, ale gdy generowanie zapytania wykracza poza zakres tej metody, co nie jest możliwe, w takich przypadkach należy dostosować zakres kontekstu, na przykład że tam, gdzie jest, obejmuje czas życia tego zapytania. Programiści powinni być w stanie zrozumieć, jaki jest okres istnienia danego zapytania i zakres kontekstu, aby był na tym samym "poziomie", nie więcej, nie mniej. – Servy
@Servy: prawda, ale w większości przypadków okres istnienia twojego kontekstu to "per-http-context". Zauważ, że taguje to pytanie za pomocą asp.net.To, co mówisz, jest częścią ogólnej teorii, potrzebuje dokładnych wskazówek do swojego konkretnego scenariusza asp.net. –