Ho un oggetto radice che ha una proprietà che è una raccolta.NHibernate Raccolta IQueryable come proprietà della radice
Ad esempio:
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;}
}
Quello che voglio realizzare è quello di restituire una collezione che è IQueryable in modo che possa funzionare paging e filtraggio fuori della collezione direttamente dal genitore.
var shelf = shelfRepository.Get(1);
var filtered = from book in shelf.Books
where book.Name == "The Great Gatsby"
select book;
voglio avere che query eseguita appositamente per NHibernate e non un ottenere tutto per caricare un'intera collezione e poi analizzarlo in memoria (che è ciò che attualmente succede quando uso ICollection).
Il ragionamento alla base di questo è che la mia raccolta potrebbe essere enorme, decine di migliaia di record, e una richiesta di ottenere tutte le query potrebbe bash il mio database.
Mi piacerebbe farlo implicitamente in modo che quando NHibernate vede un IQueryable sulla mia classe, sa cosa fare.
Ho esaminato il provider LINQ di NHibernate e attualmente sto prendendo la decisione di prendere grandi raccolte e dividerle nel proprio repository in modo da poter effettuare chiamate esplicite per il filtraggio e il paging.
LINQ to SQL offre qualcosa di simile a quello di cui sto parlando.
Grazie per essere stato così approfondito nella tua spiegazione. Ho pensato alle cose che hai detto, e sono d'accordo con tutti i punti che fai. Mi chiedo se NHibernate 3 supporti solo questo out of the box. –