Как использовать запрос 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)

Другие вопросы по тегам