NHibernate IQueryable-Auflistung als Eigenschaft von root
Ich habe ein Stammobjekt mit einer Eigenschaft, die eine Auflistung ist.
Beispielsweise
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;}
}
Was ich erreichen möchte, ist, eine Sammlung zurückzugeben, die IQueryable ist, damit ich direkt vom übergeordneten Objekt aus Paging und Filtern der Sammlung ausführen kann.
var shelf = shelfRepository.Get(1);
var filtered = from book in shelf.Books
where book.Name == "The Great Gatsby"
select book;
Ich möchte, dass diese Abfrage speziell von NHibernate ausgeführt wird, und nicht, dass alle eine ganze Sammlung laden und dann im Speicher analysieren (was derzeit geschieht, wenn ich ICollection verwende).
Der Grund dafür ist, dass meine Sammlung riesig sein könnte, Zehntausende von Datensätzen und eine Abfrage zum Abrufen aller Daten meine Datenbank zerstören könnte.
Ich möchte dies implizit tun, damit NHibernate weiß, was zu tun ist, wenn ein IQueryable in meiner Klasse angezeigt wird.
Ich habe mir den LINQ-Anbieter von NHibernate angesehen und entscheide mich derzeit, große Sammlungen in ein eigenes Repository aufzuteilen, damit ich explizite Aufrufe zum Filtern und Paging tätigen kann.
LINQ To SQL bietet etwas Ähnliches wie das, worüber ich spreche.