NHibernate Future <T>анализ - PullRequest
       23

NHibernate Future <T>анализ

1 голос
/ 12 мая 2011

У меня есть код для запроса / разбивки на страницы списка ProductPrice ... Мой объект ProductPrice имеет Product ... Код работает нормально ...

Но, глядя на log4net, у меня происходит 2 SELECT ... Это правильно?

Мой код:

var query = Session.QueryOver<ProductPrice>();
Product product = null;
query.JoinQueryOver(mg => mg.Product, () => product);

query.WhereRestrictionOn(() => product.Name).IsLike("Asics", MatchMode.Anywhere)
       .OrderBy(() => product.Name);

var rowCountQuery = query.ToRowCountQuery();
totalCount = rowCountQuery.FutureValue<int>().Value;

var firstResult = pageIndex * pageSize;

ProductViewModel productViewModel = null;
var productsViewModel = query
        .SelectList(l => l
            .Select(() => product.Id).WithAlias(() => productViewModel.Id)
            .Select(() => product.Name).WithAlias(() => productViewModel.Name)
            .Select(mg => mg.Price).WithAlias(() => productViewModel.Price))
        .TransformUsing(Transformers.AliasToBean<ProductViewModel>())
        .Skip(firstResult)
        .Take(pageSize)
        .Future<ProductViewModel>();

отредактировано
Цена продукта:

public class ProductPrice : Entity
{
    public virtual string Sku { get; set; }
    public virtual decimal Price { get; set; }
    public virtual Product Product { get; set; }
  ...
}

Продукт:

public class ProductPrice : Entity
{
    public virtual string Name { get; set; }
    public virtual IList<ProductPrice> Prices { get; set; } 
    ...
}

Отображение генерируется Fluent NHibernate ...

Спасибо

1 Ответ

3 голосов
/ 13 мая 2011

Вы делаете " .Value " слишком рано, чтобы получить количество строк. Вы должны сохранить это как:

var rowCountQuery = query.ToRowCountQuery();
var rowCount = rowCountQuery.FutureValue<int>();

Таким образом, запрос на самом деле не выполняется, просто откладывается.

После основного запроса, который выглядит нормально, теперь вы можете действительно получить целое число строк, и оба запроса должны быть одновременно отправлены в базу данных:

totalCount = rowCount.Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...