2011-09-08 6 views
7

このNHibernate blog entryは、どのようにデタッチされたQueryOverクエリ(DetachedCriteriaと同様)を作成できます(QueryOver.Of<T>()を使用)。しかし、これを見ても、それはまったく私に似ていません。デタッチされたQueryOverインスタンスをどのように使用しますか?

DetachedCriteriaを使用すると、私はインスタンスを作成して必要な設定を行い、その後はGetExecutableCriteria()を呼び出してセッションを割り当て、クエリを実行します。 「デタッチされた」QueryOverの場合、GetExecutableQueryOverに電話するまで、ほとんどのAPIは利用できません(つまり、制限、結合、注文などを追加する)。これにはISessionまたはIStatelessSessionが必要です。 。

デタッチされたQueryOverインスタンスではどうしますか?

EDIT:

public class CriteriaQuery<T> 
{ 
    internal protected QueryOver<T> _QueryOver { get; set; } 

    public CriteriaQuery() 
    { 
     _QueryOver = QueryOver.Of<T>(); 
    } 

    // Snip 
} 

それはQueryOver<T, T>次のようになります。

実際の問題は、私は切り離さQueryOverインスタンスを格納していますどのように関連していました。

+0

実際の問題は次のとおりですか? – ruffin

+0

'QueryOver 'は私が期待していたAPIを持っていません。 'QueryOver 'が私の必要なものです。 –

答えて

12

私はNHibernate 3.1.0.4000を使用しています。次のコードは正常にコンパイル:

Employee salesRepAlias = null; 

var query = QueryOver.Of<Customer>() 
    .JoinAlias(x => x.SalesRep,() => salesRepAlias) 
    .Where(x => x.LastName == "Smith") 
    .Where(() => salesRepAlias.Office.Id == 23) 
    .OrderBy(x => x.LastName).Asc 
    .ThenBy(x => x.FirstName).Asc; 

return query.GetExecutableQueryOver(session) 
    .List(); 

これは、制限を使用して参加して、ちょうどあなたが通常の1の場合と同様に切り離さQueryOverに発注示しています。

ご利用いただけないAPI機能を示すコードを投稿してください。

+0

あなたの答えを選択し、問題に実際の問題を追加しました。あなたの投稿が問題に向かって私を押し込んだからです。ありがとう。 –

関連する問題