Coleção NHibernate IQueryable como propriedade de raiz
Eu tenho um objeto raiz que possui uma propriedade que é uma coleção.
Por exemplo:
I have a Shelf object that has Books.
// Now
public class Shelf
{
public ICollection<Book> Books {get; set;}
}
// Want
public class Shelf
{
public IQueryable<Book> Books {get;set;}
}
O que eu quero realizar é retornar uma coleção que seja IQueryable para que eu possa executar a paginação e a filtragem da coleção diretamente do pai.
var shelf = shelfRepository.Get(1);
var filtered = from book in shelf.Books
where book.Name == "The Great Gatsby"
select book;
Eu quero que essa consulta seja executada especificamente pelo NHibernate e não um get all para carregar uma coleção inteira e depois analisá-la na memória (que é o que acontece atualmente quando eu uso o ICollection).
O raciocínio por trás disso é que minha coleção pode ser enorme, dezenas de milhares de registros, e uma consulta get all pode bash meu banco de dados.
Eu gostaria de fazer isso implicitamente para que, quando o NHibernate veja um IQueryable na minha classe, ele saiba o que fazer.
Examinei o provedor LINQ do NHibernate e atualmente estou tomando a decisão de coletar grandes coleções e dividi-las em seu próprio repositório para que eu possa fazer chamadas explícitas para filtragem e paginação.
O LINQ To SQL oferece algo semelhante ao que estou falando.