2011-07-11 6 views
0

何回か試してみてください。両方のテーブルから選択した列でNhibernateを結合してください

私は以下のようにQueryOverでNHibernateを使用しています。 値 "Reviews.Models.Product":私は、クエリがエラーがある

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(); 

ある

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

を製品側の

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

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

マッピングなどの製品やProductReviewをされてい"Reviews.Models.ProductReview"タイプではありません。この一般的なコレクションでは使用できません。パラメータ名:値

私は本当に別のDTOを作成したくありません。私は最後の5つの新しいレビューのリストを取得し、商品が入力されるようにしたいと思います(両方のエンティティに必要なフィールドをいくつか入力してください)。

これは、NHibernate 3.0の任意の手段(raw SQLを除く)で可能ですか?

答えて

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(); 
+0

私は別のDTOクラスを望んでいないと言いました。しかし、とにかく答えてくれてありがとう。 – Ketan

+0

DTOを削除するための私の答えを更新しました。 –

+0

それは私が今使っているものだが、それは私のために過度のものである各entitiyのすべてのフィールドを引っ張る。 – Ketan

関連する問題