Коллекция NHibernate IQueryable как свойство root
У меня есть корневой объект, который имеет свойство, которое является коллекцией.
Например:
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;}
}
То, что я хочу сделать, это вернуть коллекцию, которая является IQueryable, чтобы я мог запустить подкачку и фильтрацию коллекции непосредственно из родительского.
var shelf = shelfRepository.Get(1);
var filtered = from book in shelf.Books
where book.Name == "The Great Gatsby"
select book;
Я хочу, чтобы этот запрос выполнялся специально NHibernate, а не get all, чтобы загрузить всю коллекцию и затем проанализировать ее в памяти (что в настоящее время происходит, когда я использую ICollection).
Причиной этого является то, что моя коллекция может быть огромной, десятки тысяч записей, и запрос get all может разрушить мою базу данных.
Я хотел бы сделать это неявно, чтобы, когда NHibernate увидел IQueryable в моем классе, он знал, что делать.
Я посмотрел на LINQ-провайдера NHibernate, и в настоящее время я принимаю решение взять большие коллекции и разделить их на их собственный репозиторий, чтобы я мог делать явные вызовы для фильтрации и подкачки страниц.
LINQ To SQL предлагает нечто похожее на то, о чем я говорю.