Как использовать запрос nhibernate ToFuture с nhibernte linq
Работает ли ToFuture с nhibernate linq? Если да, то как вы это используете?
2 ответа
Решение
Да, это так. Вот простой пример:
var blogs = _session.Query<Blog>()
.Take(30)
.ToFuture();
var blogCount= _session.Query<Blog>()
.ToFutureValue(x => x.Count());
Console.WriteLine(blogCount.Value); // DB is queried here.
Вот пример, где я использовал его для формы поиска клиентов, которая отображала постраничные результаты поиска и общее количество результатов поиска. Обратите внимание, что вы можете повторно использовать IQueryable для создания двух будущих. Методы Filter строят IQueryable, основываясь на том, какие поля пользователь ищет.
int resultsPerPage = 50;
var query = _session.Query<CustomerSearch>()
.FilterById(model)
.FilterByFirstName(model)
.FilterByLastName(model)
.FilterBySocialSecurityNumber(model)
.FilterByPrimaryPhoneNumber(model);
var futureResults = query
.OrderBy(x => x.Id)
.Skip(model.Page * resultsPerPage)
.Take(resultsPerPage)
.ToFuture();
var futureCount = query.ToFutureValue(x => x.Count());
Будьте внимательны, ToFuture работает, только если драйвер базы данных поддерживает MulitpleQueries. Это имеет место только в некоторых драйверах (например, MySql, SqlServer), но не во всех (например, Oracle)