Nhibernate与两个表中的选择列连接

时间:2011-07-11 23:37:51

标签: nhibernate select join queryover

好几次尝试后,我被困在这个!

我正在使用带有QueryOver的NHibernate,如下所示。我有一个产品和产品评论

public class Product
{
 ....
 public virtual IList<ProductReview> CustomerReviews {get;set;}
 ....
}

public class ProductReview
{
 ....
 public virtual Product Product {get;set;}
 ....
}

产品方面的映射

HasMany(x => x.CustomerReviews).KeyColumn("ProductId").Inverse().Cascade.None().LazyLoad();

查询

 Product px = null;
 ProductReview rev = null;
var result = CurrentSession
            .QueryOver<ProductReview>()
            .Where(r => r.IsActive && !r.IsDraft)
            .Select(
                Projections.Property<ProductReview>(r => r.Id).WithAlias(() => rev.Id),
                Projections.Property<ProductReview>(r => r.Title).WithAlias(() => rev.Title)
                )
            .OrderBy(r => r.ReviewDate).Desc()
            .TransformUsing(Transformers.AliasToBean<ProductReview>())
            .JoinAlias(r => r.Product, () => px)
            .Select(
               Projections.Property(() => px.UPC).WithAlias(() => px.UPC),
               Projections.Property(() => px.FullName).WithAlias(() => px.FullName)
              )
              .TransformUsing(Transformers.AliasToBean<Product>())
              .Take(5)
              .List();

错误是: 值“Reviews.Models.Product”不是“Reviews.Models.ProductReview”类型,不能在此通用集合中使用。参数名称:值

我真的不想创建另一个DTO。我想获得最近5个新评论的列表,并填写产品(只填写两个实体上的几个必填字段)。

这可能通过NHibernate 3.0中的任何方式(原始sql除外)吗?

1 个答案:

答案 0 :(得分:1)

Product px = null;
ProductReview rev = null;

var result = CurrentSession.QueryOver<ProductReview>()
    .Where(r => r.IsActive && !r.IsDraft)
    .JoinQueryOver(r => r.Product)
    .OrderBy(r => r.ReviewDate).Desc()
    .Take(5)
    .List();