NHibernate的未来分析
问题描述:
我有一个代码来查询/分页一个ProductPrice列表...我ProductPrice对象有一个产品... 代码工作正常...NHibernate的未来<T>分析
但看的log4net我有2个选择发生... 是吗?
我的代码:
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>();
编辑
ProductPrice:
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; }
...
}
由功能NHibernate产生的映射...
感谢
答
你正在做的“.value的”太早让行计数。你应该保持它:
var rowCountQuery = query.ToRowCountQuery();
var rowCount = rowCountQuery.FutureValue<int>();
这样查询是不是真的执行,只是推迟。
主查询,这似乎确定后,您现在可以真正获取行计数整数,这两个查询应在同一时间被发送到数据库:
totalCount = rowCount.Value;
+0
嗯,它工作? – psousa 2011-05-14 22:27:54
很可能映射问题。你能用你的映射更新你的问题吗? – csano 2011-05-12 17:31:11
编辑...我的映射是由流利NHibernate生成的... – Paul 2011-05-12 17:55:23