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产生的映射...

感谢

+0

很可能映射问题。你能用你的映射更新你的问题吗? – csano 2011-05-12 17:31:11

+0

编辑...我的映射是由流利NHibernate生成的... – Paul 2011-05-12 17:55:23

你正在做的“.value的”太早让行计数。你应该保持它:

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

这样查询是不是真的执行,只是推迟。

主查询,这似乎确定后,您现在可以真正获取行计数整数,这两个查询应在同一时间被发送到数据库:

totalCount = rowCount.Value; 
+0

嗯,它工作? – psousa 2011-05-14 22:27:54